2011-07-27 2 views
-1
import java.awt.Panel; 

import java.awt.event.ActionEvent; 

import java.awt.event.ActionListener; 

import java.sql.DriverManager; 

import java.sql.PreparedStatement; 

import java.sql.ResultSet; 

import java.sql.Statement; 

import javax.swing.JButton; 

import javax.swing.JFrame; 

import javax.swing.JLabel; 

import javax.swing.JTextField; 

import com.mysql.jdbc.Connection; 

public class one implements ActionListener{ 

    JFrame frame = new JFrame("ghar hisab"); 
    JButton b = new JButton("save"); 
    Panel p = new Panel(); 
    JTextField f = new JTextField(20); 
    JTextField f1 = new JTextField(20); 
    JLabel l = new JLabel("Enter the first name"); 
    JLabel l1 = new JLabel("Enter the last name"); 
    String s1,s2; 
    String ppl; 
    int people; 

      void display() throws Exception{ 
           p.add(l); 
           p.add(f); 
           p.add(l1); 
           p.add(f1); 
           p.add(b); 

           frame.setSize(400,400); 

           frame.setVisible(true); 
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
           frame.getContentPane().add(p); 
           s1=f.getText(); 
           s2=f1.getText(); 


       //Class.forName("com.mysql.jdbc.Driver"); 
       //Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/people","root","desire"); 

       //Statement stat = con.createStatement(); 
      // String s3= "insert into name values s1 + s2"; 
      // stat.executeUpdate(s3); 



     // stat.executeQuery("insert into name (first,last) values('"+s1+"','"+s2+"')"); 
      b.addActionListener(this); 

     // ResultSet rs= stat.executeQuery("insert into name (first,last) values("arun","yadav")); 


      //while(rs.next()){ 
     //  System.out.println(rs.getString(1)+" "+rs.getString(2)); 
     // } 




     } 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      // TODO Auto-generated method stub 
      try{ 
       Class.forName("com.mysql.jdbc.Driver"); 

      Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/people","root","desire"); 

      Statement stat = con.createStatement(); 

      stat.executeQuery("insert into name (first,last) values('"+s1+"','"+s2+"')"); 
      } 
      catch(Exception e){ 
       System.out.println("the exception caught is "+e); 
      } 
     } 


} 
+1

예외에서 스택 추적을 얻으면 디버깅에 도움이됩니다. –

+2

정보가 충분하지 않습니다 - 스택 추적을 게시하십시오. 해당 메시지를 인쇄하지 마십시오. 사용 가능한 정보보다 정보가 적습니다. – duffymo

+0

stat.executeUpdate로 stat.executeQuery를 바꾸면 예외 문제가 해결됩니다. 데이터베이스 테이블의 새 항목도 만들어 지지만 "첫 번째"및 "마지막"필드에는 아무 것도 표시되지 않습니다. –

답변

1

스택 추적이 없으면 알기 어렵습니다. 연결을 설정하지 않았거나 SQL의 값으로 인해 쿼리에 오류가 발생했습니다 (하나 또는 둘 다 null 임). 나는 con에 중단 점을 넣고 객체가 null인지 확인하는 것이 좋습니다. 또한 s1과 s2가 무엇인지 확인하십시오. 아래에서는 두 줄을 추가했습니다. 진술과 연결을 닫아야합니다.

public void actionPerformed(ActionEvent event) { 
    // TODO Auto-generated method stub 
    try 
    { 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/people","root","desire"); 
     Statement stat = con.createStatement(); 
     stat.executeQuery("insert into name (first,last) values('"+s1+"','"+s2+"')"); 
     stat.close(); 
     con.close(); 
    } 
    catch(Exception e){ 
     System.out.println("e.fillInStackTrace:" + e.fillInStackTrace()); 
     System.out.println("e.getCause:" + e.getCause()); 
     System.out.println("e.getLocalizedMessage:" + e.getLocalizedMessage()); 
     System.out.println("e.getMessage.:" + e.getMessage()); 
     System.out.println("e.getStackTrace:" + e.getStackTrace()); 
     System.out.println("e.initCause:" + e.initCause()); 
     System.out.println("e.printStackTrace:" + e.printStackTrace()); 
     System.out.println("e.toString:" + e.toString());  
    } 
} 
+0

stat.executeUpdate로 stat.executeQuery를 바꾸면 예외 문제가 해결됩니다. 데이터베이스 테이블의 새 항목도 만들어 지지만 "첫 번째"및 "마지막"필드에는 아무 것도 표시되지 않습니다. –

+0

"첫 번째"및 "마지막"필드를 말하면 삽입이 완료된 후 데이터베이스를 쿼리하고 있습니까? 다음과 같이 : SELECT * FROM [name] ??? – MacGyver

+0

사용자 (루트)가 INSERT 명령을 수행 할 수있는 적절한 권한을 가지고 있습니까? 상상하기 때문에, 근본적이긴하지만 꼭 확인하고 싶었습니다. 해당 필드의 SQL 데이터 유형이 Java 코드에서 보내는 데이터와 일치합니까? – MacGyver

1

PreparedStatement를 가져 왔지만 코드에서 사용하지 않는 것으로 나타났습니다. 글쎄, 나는 SQL에 대해 많이 알지 못하지만 PreparedStatement를 사용할 때 문제가 발생할 확률이 적다. 여기에 삽입하는 간단한 예입니다

String sql = "INSERT INTO Name (First, Last) VALUES (?, ?)"; 

PreparedStatement stmt = connection.prepareStatement(sql); 

stmt.setString(1, s1); 
stmt.setString(2, s2); 
stmt.executeUpdate(); 

는 그 대부분의 사람들이 테이블 이름을 만들 것입니다 방법이기 때문에 테이블 이름과 열 이름을 uppercasing의 자유를했다.

편집 :

사용자가 아직 텍스트 필드에 데이터를 입력 할 수있는 기회가되지 않았기 때문에 그 코드는 텍스트 필드를 실행 더 값이 포함되지
s1=f.getText(); 
s2=f1.getText(); 

. 이 두 문장은 actionPerformed() 메소드로 옮겨야합니다.

+0

stat.executeUpdate로 stat.executeQuery를 바꾸면 예외 문제가 해결됩니다. 데이터베이스 테이블의 새 항목도 만들어 지지만 "첫 번째"및 "마지막"필드에는 아무 것도 표시되지 않습니다. –

+0

@Apurva, 변수 s1과 s2가 실제로 값을 포함하는지 확인하십시오. 내 편집을 참조하십시오. – camickr

관련 문제