2012-03-08 8 views
0

私はコードを書いています。ボタンを押すと、データベースにレコードを作成するためのテキストフィールドからの値が取られます。コードはコンパイルされますが、実行するとこのエラーメッセージが表示されます。PreparedStatement 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 

ご意見はありますか? (あなたがANSIモードが有効になっている場合は、引用符)

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

答えて

0

Fromは、MySQLの予約語である:

`From` 
+0

それは動作します:)素晴らしい、ありがとう。 – Pita

+7

* "また、次のようにコード内のテーブルからすべてのフィールドを取り除くこともできます。" *すべてのフィールドを指定していて、テーブルが定義した順序で、テーブル定義それに頼るのは非常に悪い考えです。明示的な列名が理由で使用されます。 –

5

fromは、SQLの予約語である、あなたはescape it with backticksする必要があります。

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

私は一貫性を保つために、他のカップルは、いくつかのエンジン(またはしない)によって予約される場合がありますので、そこに列名のすべてをやりました。

+0

'DATE'は予約されたキーワードではありません(少なくとも、これ以上はありません)。 –

+0

@AmalMurali:ありがとう、私は今、その文をwaffledしました。 :-) –

1

一部の列名は、SQLのキーワードに一致するバック引用符で囲みます。また、あなたは、次のようなコードであなたのテーブルからすべてのそれらのフィールドを取り除くことができます。

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

動作する必要があること。

関連する問題