Java中的PreparedStatement插入
我写了一个代码,如果按下一个按钮,文本字段中的值将在数据库中创建一个记录。代码可以编译,但当我运行它时,会收到以下错误消息:Java中的PreparedStatement插入,java,prepared-statement,Java,Prepared Statement,我写了一个代码,如果按下一个按钮,文本字段中的值将在数据库中创建一个记录。代码可以编译,但当我运行它时,会收到以下错误消息: 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
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);
from
是SQL中的保留字,您需要(如果启用了ANSI模式,则需要加引号)
为了保持一致性,并且因为一些引擎可能会保留(或不保留)其他一些列名,所以我在这里列出了所有列名。“From”是一个关键字。请记住,SQL中的关键字是case-instive。用反引号括起来
`From`
某些列名称与SQL关键字匹配:
From
是MySQL中的保留字。此外,您还可以从代码中的表中删除所有这些字段,如下所示:
String sql = "INSERT into vacation VALUES" + "(?,?,?,?,?,?,?,?,?)";
这应该行得通。From是一个保留关键字,To和Date可能也是(请查看手册)。它的工作原理是:)太好了,谢谢。“此外,您可以在代码中从表中删除所有这些字段,如下所示”仅当您按照表中定义字段的顺序指定所有字段时,而且从来没有人编辑过表定义。依靠它是非常非常糟糕的主意。使用显式列名是有原因的。
DATE
不是保留关键字(至少不再是了)。@AmalMurali:谢谢,我现在已经把这句话说得含糊不清了。:-)
String sql = "INSERT into vacation VALUES" + "(?,?,?,?,?,?,?,?,?)";