Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC-update语句更新失败,未引发异常_Java_Mysql_Jdbc_Update Statement - Fatal编程技术网

Java JDBC-update语句更新失败,未引发异常

Java JDBC-update语句更新失败,未引发异常,java,mysql,jdbc,update-statement,Java,Mysql,Jdbc,Update Statement,我创建了一个连接到MySQL工作台的小型SWING应用程序。我试图为jbutton编写代码,当按下它时,它会更新数据库中的表。我在这里讨论了StackOverflow的所有问题,但是查询仍然无法在数据库中执行更新。我试图通过放置一些print语句来调试代码,我注意到当某个单元格被修改时,准备好的语句没有收到更新。然而,没有抛出异常。我如何处理这个问题 JButton update_Button = new JButton("UPDATE ");

我创建了一个连接到MySQL工作台的小型SWING应用程序。我试图为jbutton编写代码,当按下它时,它会更新数据库中的表。我在这里讨论了StackOverflow的所有问题,但是查询仍然无法在数据库中执行更新。我试图通过放置一些print语句来调试代码,我注意到当某个单元格被修改时,准备好的语句没有收到更新。然而,没有抛出异常。我如何处理这个问题

JButton update_Button = new JButton("UPDATE ");
                update_Button.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent arg0) {
                        Connection connection = null;   
                        
                        int selectIndex = table_1.getSelectedRow();
                        int id = Integer.parseInt(model.getValueAt(selectIndex, 0).toString());
                                                                        
                        try {
                            
                            connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/librarydatabase", "root", "Connection");  
                            connection.setAutoCommit(false);
                            String sql = "UPDATE book SET author = ?, title = ?,subject = ?, publisher = ?, language = ? WHERE bookID = ?";
                            PreparedStatement statement = (PreparedStatement) connection.prepareStatement(sql);                                                                                     
                            statement.setString(1, author_TextField.getText());
                            statement.setString(2, title_TextField.getText());
                            statement.setString(3, subject_ComboBox.getSelectedItem().toString());
                            statement.setString(4, publisher_ComboBox.getSelectedItem().toString());
                            statement.setString(5, language_ComboBox.getSelectedItem().toString());
                            statement.setInt(6, id);
                                                                                                                                                        
                            statement.execute();    
                            connection.commit();
                            
                            JOptionPane.showMessageDialog(null, "The book has been updated successfully");
                            
                            statement.close();
                            connection.close();
                            
                    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }catch(Throwable e) 
                    {
                        e.printStackTrace();
                    }
                    }
                });
试用

statement.executeUpdate();
而不是

statement.execute();

我已经试过你的代码,我知道你最好使用executeUpdate方法。如果您可以为数据库连接创建不同的类,那么这是一个很好的实践,不要在同一个类中创建所有的方法和数据库连接

        Connection conn;
        conn = DbConnect.connect();

        int colum;
        int row = table.getSelectedRow();
        String data = table.getValueAt(row, 2).toString();
        System.out.println(data);

        try {
            String sql = "UPDATE book SET author = ?, title = ?,subject = ?, publisher = ?, language = ? WHERE id = ?";
            PreparedStatement pst = conn.prepareStatement(sql);
            pst.setString(1, table.getValueAt(row, 1).toString());
            pst.setString(2, table.getValueAt(row, 2).toString());
            pst.setString(3, table.getValueAt(row, 3).toString());
            pst.setString(4, table.getValueAt(row, 4).toString());
            pst.setString(5, table.getValueAt(row, 5).toString());
            pst.setString(6, table.getValueAt(row, 0).toString());
            int a = pst.executeUpdate();
            if (a > 0) {
                System.out.println("Successfully update");
            } else {
                System.out.println("Faild to update");
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
输出:
如果你觉得舒服,请考虑包括你的数据库。检查你的服务器日志可能有一些错误。谢谢Kanishka。我在遵循一个教程,它没有为每个按钮创建不同的类,我会按照你的建议。不管怎样,我尝试了你的代码,它确实有效,但它仍然没有更新数据库,这就是我的问题所在。我认为如果你使用的是mysql
Class.forName(“com.mysql.jdbc.Driver”)
在getConnection之前,如果你使用的是Oracle,那么在Class.forName(Oracle.jdbc.Driver.OracleDriver)之前,你必须在代码中提到数据库