Java 将数据插入数据库时发生SQLException

Java 将数据插入数据库时发生SQLException,java,database,parameter-passing,prepared-statement,sqlexception,Java,Database,Parameter Passing,Prepared Statement,Sqlexception,我正在尝试插入数据,但它给了我成功消息,但没有插入到数据库中。我正在使用netbeans和Xampp。我尝试了很多方法,但都是一样的 这是我的代码: public AddSeat() { initComponents(); connect(); } Connection con; PreparedStatement pst; public void connect(){ try { Class.forName("

我正在尝试插入数据,但它给了我成功消息,但没有插入到数据库中。我正在使用netbeans和Xampp。我尝试了很多方法,但都是一样的

这是我的代码:

public AddSeat() {
        initComponents();
        connect();
    }
    
Connection con;
PreparedStatement pst;

public void connect(){
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/busticket", "root", "");
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(AddSeat.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
        Logger.getLogger(AddSeat.class.getName()).log(Level.SEVERE, null, ex);
    }
}
这是插入方法:

private void button2ActionPerformed(java.awt.event.ActionEvent evt) {
    String busno = txtbus.getSelectedItem().toString();
    
    SimpleDateFormat Date_Format = new SimpleDateFormat("yyyy/mm/dd");
    
    String date = Date_Format.format(txtdate.getDate());
    
    for(int i = 0; i<=30; i++)
    {
        try {
            int seats = i;
            String status = "Unbooked";
            pst = con.prepareStatement("insert into sat(busno, seats, date, status,) values(?, ? , '?' , '?')");
            pst.setString(1, busno);
            pst.setInt(2, seats);
            pst.setString(3, date);
            pst.setString(4, status);
            pst.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(AddSeat.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    JOptionPane.showMessageDialog(this, "Seat Added!");
}      

为什么代码会出现此错误?

您不应该被包围?在sql语句中使用单引号,因为它们会被视为字符而不是占位符

换成

prepareStatement("insert into sat(busno, seats, date, status,) values(?, ?, ?, ?)");

你不应该被包围?在sql语句中使用单引号,因为它们会被视为字符而不是占位符

换成

prepareStatement("insert into sat(busno, seats, date, status,) values(?, ?, ?, ?)");

在准备好的语句中,您不必根据类型引用问号,
set*
方法将使用它

pst = con.prepareStatement("insert into sat(busno, seats, date, status,) values(?, ?, ?, ?)");

在准备好的语句中,您不必根据类型引用问号,
set*
方法将使用它

pst = con.prepareStatement("insert into sat(busno, seats, date, status,) values(?, ?, ?, ?)");

不要把问号放在引号里。它不认为它们是这样的参数。使用相关的标签。在命令行应用程序中调试数据库端。不要添加标签。我建议您不要使用
SimpleDateFormat
Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。而是使用
LocalDate
DateTimeFormatter
,两者都来自。另外,不要将日期作为字符串传输到数据库中,使用
pst.setObject(3,yourLocalDate)传输
LocalDate
。无论是使用现代的
DateTimeFormatter
还是旧的且麻烦的
SimpleDateFormat
都要注意格式模式字母的情况。请检查格式模式字符串中小写
mm
和大写
mm
之间的差异。正如所指出的,问题是您在引号中添加了问号,因此插入了文字问号,但是,由于代码将它们视为文字问号,因此不再需要四个参数,因此出现了错误。一般来说,在发布到Stack Overflow时,您应该在标题中包含实际异常的详细信息(即“参数索引超出范围(3>参数数量,即2)”),以帮助人们识别它。或者甚至可以先搜索一下,这样可能会更快地找到答案。不要把问号放在引号里。它不认为它们是这样的参数。使用相关的标签。在命令行应用程序中调试数据库端。不要添加标签。我建议您不要使用
SimpleDateFormat
Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。而是使用
LocalDate
DateTimeFormatter
,两者都来自。另外,不要将日期作为字符串传输到数据库中,使用
pst.setObject(3,yourLocalDate)传输
LocalDate
。无论是使用现代的
DateTimeFormatter
还是旧的且麻烦的
SimpleDateFormat
都要注意格式模式字母的情况。请检查格式模式字符串中小写
mm
和大写
mm
之间的差异。正如所指出的,问题是您在引号中添加了问号,因此插入了文字问号,但是,由于代码将它们视为文字问号,因此不再需要四个参数,因此出现了错误。一般来说,在发布到Stack Overflow时,您应该在标题中包含实际异常的详细信息(即“参数索引超出范围(3>参数数量,即2)”),以帮助人们识别它。或者甚至可以先搜索一下,这可能会让你更快地找到答案。请不要发布重复答案,直到出现相同的错误并且无法将数据插入数据库。请不要发布重复答案,直到出现相同的错误并且无法将数据插入数据库。我删除了单引号,但仍然面临相同的问题,无法将数据插入数据库数据库我怀疑你也会遇到同样的异常,因为这显然是个问题。如果您现在有另一个错误,那么您需要发布一个新问题。我删除了单引号,但仍然面临相同的问题。无法将数据插入数据库。我怀疑您是否收到相同的异常,因为这显然是问题所在。如果您现在有另一个错误,那么您需要发布一个新问题