Java Mysql异常";超出范围;?

Java Mysql异常";超出范围;?,java,mysql,swing,jdbc,Java,Mysql,Swing,Jdbc,我在基于swing的项目中工作,使用预先准备好的语句,但它会出现异常,例如超出范围,当我使用参数时,不会使用“?”而只是简单地使用?然后显示异常,如“ jdbc语法错误请查看第一行“?,?”附近的手册“我对正在发生的事情感到非常困惑。请检查我的代码出了什么问题 private void AddActionPerformed(java.awt.event.ActionEvent evt) { if (((JTextField) chose.getDateEditor().getUiComp

我在基于swing的项目中工作,使用预先准备好的语句,但它会出现异常,例如超出范围,当我使用参数时,不会使用“?”而只是简单地使用?然后显示异常,如“ jdbc语法错误请查看第一行“?,?”附近的手册“我对正在发生的事情感到非常困惑。请检查我的代码出了什么问题

private void AddActionPerformed(java.awt.event.ActionEvent evt) {
    if (((JTextField) chose.getDateEditor().getUiComponent()).getText() == null) {
        String sql = "INSERT INTO expance1 ( Breakfast,Date) VALUES (?,?)";
    } else {
        String sql = "INSERT INTO expance1 ( Breakfast,Date) VALUES (?,?)";
        try {
            pst = conn.prepareStatement(sql);
            pst.setString(1, breakfast.getText());
            pst.setString(2, ((JTextField) chose.getDateEditor().getUiComponent()).getText());
            pst.executeUpdate(sql);
            JOptionPane.showMessageDialog(null, "insert sucessfully");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        } finally {
            try {
                rs.close();
                pst.close();

            } catch (Exception e) {
            }
        }
    }
}
替换

 pst.executeUpdate(sql);

SQL查询已在准备语句时传递给该语句。你不能第二次通过考试。传递它将执行文字SQL查询,而不是准备好的查询。

Replace

 pst.executeUpdate(sql);


SQL查询已在准备语句时传递给该语句。你不能第二次通过考试。传递它将执行文字SQL查询,而不是准备好的查询。

请添加该异常。我指的是C.jdbc4.mysqlsyntaxErrorException的整个堆栈跟踪:您的SQL语法中有一个错误。请检查与您的MySql服务器版本相对应的手册,以便在第1行的“,?)”附近使用正确的语法。在我们帮助您之前,您应该检查以下建议:1.名称正确吗(列名和表名)?2.列类型是否正确(两者都必须是VARCHAR或类似类型)?3.在.setString()中返回两个方法的字符串声明您要保存什么?No breaken是int数据类型,date是VARCHAR,而column name和table name是正确的。现在我将int更改为VARCHAR,但仍然是相同的异常。请添加该异常。我指的是c.jdbc4.mysqlSyntaxErroException的整个堆栈跟踪:您的SQL语法中有错误。请检查相应的手册在第1行的“,?)”附近使用正确的语法时,在我们帮助您之前,您应该检查以下建议:1。名称是否正确(列名和表名)?2.列类型是否正确(两者都必须是VARCHAR或类似类型)?3.在.setString()语句中,两个方法的返回字符串是您要保存的吗?No breaken是int数据类型,date是VARCHAR,而列名和表名是正确的。现在我将int更改为VARCHAR,但仍然是相同的异常。当
executexx(字符串)出现异常时,JDBC驱动程序必须引发异常
方法在
PreparedStatement
上调用。MySQL中的一个错误是它甚至试图实际执行它(这会导致语法错误)。当对
PreparedStatement
调用
executeXXX(String)
方法时,JDBC驱动程序必须抛出异常。MySQL中有一个bug,它甚至试图实际执行它(这会导致语法错误)。