Java / JDBC / SQLite / BLOB - Blob的主要缺陷

时间:2016-12-21 21:35:41

标签: java sqlite jdbc blob

我在SQLite数据库中更新数据时遇到了困难。我尝试使用BinaryStream然而没有运气。所以我决定,拧紧它。无需更新Blob,如果我删除任何与BLOB相关的代码(即使在SQL语句中),Update语句也不会执行(正确)。在添加BLOB之前一切正常。现在我似乎无法理解为什么我不能再更新我的数据库了。如果我取出BLOB,程序会说“员工已成功添加到数据库”但是,当我查看我的数据库时,所有信息都是相同的。我可以插入,搜索和删除它们的方法很好,只是更新只是似乎并没有为我工作。关于该做什么的想法已经不多了,有人可能会帮助我吗?即使它没有更新BLOB,按照这个速度我也会采取任何措施。更新或不更新。

代码 -

 updateEmployee.addActionListener(new ActionListener() {

     @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            Connection connection = null;
            PreparedStatement pst = null;

            try {

                Class.forName("org.sqlite.JDBC");
                connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
                connection.setAutoCommit(false);

                String sql = "UPDATE employees SET ID =?, Name=?, Gender=?, DOB=?, Address=?, Postcode=?, NIN=?, JobTitle=?, StartDate=?, Salary=?, Email=?, Images=? WHERE ID=?";
                  pst = connection.prepareStatement(sql);

                pst.setInt(1,Integer.parseInt(idTextField.getText()));
                pst.setString(2, nameTextField.getText());
                pst.setString(3, genderTextField.getText());
                pst.setString(4, dobTextField.getText());
                pst.setString(5, addressTextField.getText());
                pst.setString(6, postcodeTextField.getText());
                pst.setString(7, ninTextField.getText());
                pst.setString(8, jobtitleTextField.getText());
                pst.setString(9, startdateTextField.getText());
                pst.setString(10, salaryTextField.getText());
                pst.setString(11, emailTextField.getText());
                pst.setBytes(12, readFile(s));

                pst.executeUpdate();

                System.out.println("EmployeeAdded");
                JOptionPane.showMessageDialog(null, "Employee has successfully added to the database");             


                 connection.commit();
                pst.close();
                connection.close();
            }
            catch ( Exception e1 ) {


                    JOptionPane.showMessageDialog(null, "Uh oh! Something went wrong!");
                }
            }
        });

谢谢。

2 个答案:

答案 0 :(得分:0)

对问题进行排序。

这是行 -

 String sql = "UPDATE employees SET ID =?, Name=?, Gender=?, DOB=?, Address=?, Postcode=?, NIN=?, JobTitle=?, StartDate=?, Salary=?, Email=?, Images=? WHERE ID=?";

我需要为pst.setInt(12,Integer.parseInt(idTextField.getText()));添加WHERE ID=?

之前从来没有发生在我身上,唉,我会接受它。

答案 1 :(得分:0)

您的命令文本有13个参数占位符(?),但您只定义了12个参数。你错过了最后一个,它应该与第一个相同(“ID”)。