【问题标题】:Java/JDBC/SQLite/BLOB - Major Flaw With BlobJava/JDBC/SQLite/BLOB - Blob 的主要缺陷
【发布时间】:2017-05-07 10:30:26
【问题描述】:

我很难更新我的 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!");
                }
            }
        });

谢谢。

【问题讨论】:

  • 也许您可以打印出实际的异常而不是出现问题。这可能会让您和我们知道出了什么问题。
  • @Shadow java.lang.NullPointerException
  • @Shadow 我需要使用 ResultSet 吗?
  • @Shadow 好的,我已经设法克服了 java.lang.NullPointerException,并且当语句正确执行时会出现一个消息框。但是,在查看我的数据库时,数据库中的信息并未更新或已更改。

标签: java sqlite jdbc blob


【解决方案1】:

对问题进行了排序。

它是与线-

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

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

不过,我以前从来没有发生过,唉,我会接受的。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,问题已解决。我发布了答案。感谢您的评论。
    猜你喜欢
    • 2017-05-07
    • 2017-08-14
    • 2011-06-26
    • 2012-02-29
    • 2017-05-06
    • 2011-08-16
    • 2012-08-07
    • 2018-07-08
    • 2015-06-19
    相关资源
    最近更新 更多