2017-06-22 31 views
0

我試圖讓Java ucanaccess程序,並出於某些原因我不能夠插入記錄到數據庫中,並已出現了一些錯誤信息如下:java的ucanaccess錯誤信息

package lcp_v1; 

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.sql.*; 

public class DB2 extends JFrame implements ActionListener { 

    private JPanel contentPane; 
    private JTextField id_tt; 
    private JTextField name_tt; 

    Connection con; 
    Statement st; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 

        DB2 frame = new DB2(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public DB2() { 
     try { 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setBounds(100, 100, 577, 550); 
      contentPane = new JPanel(); 
      contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
      setContentPane(contentPane); 
      contentPane.setLayout(null); 

      JLabel lblEmployeeId = new JLabel("employee id"); 
      lblEmployeeId.setBounds(39, 53, 123, 23); 
      contentPane.add(lblEmployeeId); 

      id_tt = new JTextField(""); 
      id_tt.setBounds(161, 50, 136, 29); 
      contentPane.add(id_tt); 
      id_tt.setColumns(10); 

      JLabel lblName = new JLabel("Name"); 
      lblName.setBounds(39, 118, 71, 23); 
      contentPane.add(lblName); 

      name_tt = new JTextField(""); 
      name_tt.setColumns(10); 
      name_tt.setBounds(161, 115, 136, 29); 
      contentPane.add(name_tt); 

      JButton insert = new JButton("Insert"); 
      insert.setBounds(39, 388, 105, 30); 
      contentPane.add(insert); 
      insert.addActionListener(this); 

      Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); 
      String dataSource = "jdbc:ucanaccess://D:/Database.accdb"; 
      con = DriverManager.getConnection(dataSource, "", ""); 
      Statement st = con.createStatement(); 

     } catch (Exception e) { 
     } 
    }//end DB2 constructor  

    public void actionPerformed(ActionEvent ae) { 

     try { 

      String id = id_tt.getText(); 
      String name = name_tt.getText(); 
      String s1 = "INSERT INTO Table1 (ID, Name) VALUES (id,name)"; 
      st.executeUpdate(s1); 
      id_tt.setText(""); 
      name_tt.setText(""); 

     } catch (SQLException e1) { 
      e1.printStackTrace(); 
     } 

    } 
} 

error messages

請告訴我什麼錯誤我有沒有make.thanks很多

+0

請以文本形式發佈異常堆棧跟蹤,而不是屏幕截圖。 –

回答

0

第一:NullPointException,因爲你不改變st值:

Statement st = con.createStatement(); 

你剛纔創建的,在你的類同名的另一個變量,所以不是你必須使用:

st = con.createStatement();//Inisialize it, don't create and inisialize another variable. 

閱讀更多關於What is a NullPointerException, and how do I fix it?


二:看來你不插入任何東西,你的查詢只是一個可以給你SQL異常的字符串。


三:這是這個答案的主要OBJECTIF,所以不是聲明它可以讓你的語法錯誤或SQL注入,我會建議使用預處理語句,例如:

int id = Integer.parseInt(id_tt.getText());//get the id 
int name = name_tt.getText();//get the name 
try (PreparedStatement insert = connection.prepareStatement(
     "INSERT INTO Table1 (ID, Name) VALUES (?, ?))")) { 

    insert.setInt(1, id);//set the id to your statement 
    insert.setString(2, name);//set the name to your statement 
    insert.executeUpdate();//execute the statement 

    id_tt.setText(""); 
    name_tt.setText(""); 
} 

注意,一般id應該是主鍵和auto_increment,所以我認爲你必須看看你的dat的設計凌辱。