Java 通过单击按钮将选定的jTable行插入数据库

Java 通过单击按钮将选定的jTable行插入数据库,java,mysql,Java,Mysql,我试图通过单击按钮将jTable中的数据插入数据库。我得到一个异常,说列计数与第1行的值计数不匹配 private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: try{ Class.forName("com.mysql.cj.jd

我试图通过单击按钮将jTable中的数据插入数据库。我得到一个异常,说列计数与第1行的值计数不匹配

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    try{
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/sms", "root", "");

        String query="insert into attendance(regNo,name,sClass,attendance,date) values('"+regNo+"','"+names+"','"+sClass+"','"+attendance+"')";
        Statement st=connection.createStatement();

        int row=jTable_Display_Student.getSelectedRow();
        String regNo=(jTable_Display_Student.getValueAt(row, 0).toString());
        String names=(jTable_Display_Student.getValueAt(row, 1).toString());
        String sClass=(jTable_Display_Student.getValueAt(row, 2).toString());
        String attendance=(jTable_Display_Student.getValueAt(row, 3).toString());



        st.executeUpdate(query);

       JOptionPane.showMessageDialog(null, "Selected Rows Submitted Successfully.");
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null,e.getMessage());
    }
}

我们将非常感谢您在本部分代码中提供的任何帮助

    String query="insert into attendance(regNo,name,sClass,attendance,date) values('"+regNo+"','"+names+"','"+sClass+"','"+attendance+"')";
你有5列

 (regNo,name,sClass,attendance,date)
只有4个值来填充它们

values('"+regNo+"','"+names+"','"+sClass+"','"+attendance+"')
因此,您需要添加缺少的日期

在尝试使用SQL时使用PreparedStatement。代码更容易阅读,也不容易出错

让您开始学习的一个基本示例:

String sql = "INSERT INTO Page (Name, Title) VALUES (?, ?)";
PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, nameValue );
stmt.setString( 2, titleValue );
stmt.executeUpdate();
希望你能很容易地告诉我:

正在更新的列数,以及需要传递给SQL语句的值数 您不必担心这些值的所有分隔符。
这段代码不会编译。这个代码不能导致那个例外。我猜您运行的是另一个版本。关于你发布的问题:这个异常试图告诉你什么?这是因为有五个字段,你只在regNo、name、sClass、attention、date的query5列中发送四个值,但在值“+regNo+”、“+names+”、“+sClass+”中只发送了四个值,“+Attention+”-缺少日期…但有点奇怪:您正在创建SQL命令,然后,在变量中加载值-Java不能以这种方式工作。当它执行行字符串查询=..时,此时的变量值用于创建字符串。如果随后更改了变量,查询变量将不会更改,更不用说您必须在使用@CarlosHeuberger这就是为什么我说代码不会编译。变量是在声明之前使用的。我将列与值匹配,现在得到的异常是数据真相:数据对于第1行的列“regNo”太长,但该单元格中的值是一位数字。虽然我可以使用preparedStatement,但它仅在输入来自其他组件(如textfield和组合框。如何使用PreparedStatement指定表列,与您在代码示例中所做的相同。您使用getValueAt。。。JTable的方法。