2011-07-27 125 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中的值導致查詢出錯(可能一個或兩個都爲空)。我建議在con上放一個斷點,並查看該對象是否爲空。並且看看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

用戶(root)是否具有執行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

相關問題