2012-03-08 33 views
0

我写了一段代码,如果按下按钮,那么应该从textfields中取值来在数据库中创建一条记录。代码编译但是当我运行它时,我收到此错误消息:PreparedStatement Insert in Java

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'From, To, TotalDays, VacationType, Notes, Signature, Date) VALUES('','','','',''' at line 1 

有什么建议吗?

final JButton btnSubmit = new JButton("Submit"); 
    btnSubmit.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) {     
     try { 

      String vacationid = text_vacationID.getText(); 
      String staffid = text_staffID.getText(); 
      String from = text_from.getText(); 
      String to = text_to.getText(); 
      String totaldays = text_totalDays.getText(); 
      String vacationtype = text_vacationType.getText(); 
      String notes = textArea.getText(); 
      String signature = text_signature.getText(); 
      String date = text_date.getText(); 


      String sql = "INSERT into vacation (VacationID, StaffID, From, To, TotalDays, VacationType, Notes, Signature, Date) VALUES" + "(?,?,?,?,?,?,?,?,?)";  

      PreparedStatement prest = con.prepareStatement(sql); 
      prest.setString(1, vacationid); 
      prest.setString(2, staffid); 
      prest.setString(3, from); 
      prest.setString(4, to); 
      prest.setString(5, totaldays); 
      prest.setString(6, vacationtype); 
      prest.setString(7, notes); 
      prest.setString(8, signature); 
      prest.setString(9, date); 

      prest.executeUpdate(); 
      JOptionPane.showMessageDialog(frmBookVacation, "Vacation has been booked for Employee with ID: " + vacationid); 


     } 

     catch (SQLException e) { 
     //System.out.println("Record couldn't be added!"); 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(frmBookVacation, "Vacation couldn't be booked. Please try again."); 
     } 
     } 

     }); 
    btnSubmit.setBounds(201, 350, 89, 23); 
    panel_1.add(btnSubmit); 
+1

From是一个保留关键字,To和Date可能也是(查看手册)。 – Eduardo 2012-03-08 22:03:59

回答

0

From是在MySQL的保留字。您也可以从代码中删除表格中的所有字段,如下所示:

String sql = "INSERT into vacation VALUES" + "(?,?,?,?,?,?,?,?,?)";  

这应该起作用。

+0

它的作品:)太好了,谢谢。 – Pita 2012-03-08 22:06:55

+7

*“您也可以在代码中删除表中所有这些字段,如下所示:”*仅当您指定所有字段时,按表的定义顺序以及没有人编辑过表定义。非常非常糟糕的主意依赖于此。明确的列名是有原因的。 – 2012-03-08 22:09:22

5

from是SQL的保留字,你需要escape it with backticks(或报价,如果你启用了ANSI模式)。

String sql = "INSERT into vacation (`VacationID`, `StaffID`, `From`, `To`, `TotalDays`, `VacationType`, `Notes`, `Signature`, `Date`) VALUES" + "(?,?,?,?,?,?,?,?,?)"; 

我已经做了所有的列名的还有,一致性和,因为一对夫妇的人可能会被一些发动机(或没有)保留。

+0

'DATE'不是一个保留关键字(至少,不再是)。 – 2014-05-04 17:41:17

+0

@AmalMurali:谢谢,我现在对这句话不屑一顾。 :-) – 2014-05-04 18:57:08

1

“From”是关键字。请记住,SQL中的关键字不区分大小写。围绕着它的反引号

`From`