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" + "(?,?,?,?,?,?,?,?,?)";