【问题标题】:Freeze a gui jdbc ,when save a data,why?冻结一个gui jdbc,保存数据时,为什么?
【发布时间】:2013-05-18 13:48:25
【问题描述】:

我创建了一个项目(我使用此教程:http://www.homeandlearn.co.uk/java/save_a_new_record.html 使用此数据库:http://www.homeandlearn.co.uk/java/java_and_databases.html

当我想保存新记录时,程序会冻结。(我想当我保存新数据时,程序将能够使用下一个和上一个按钮工作)

我用这些代码更改了 save_button:

private void btnSaveRecordActionPerformed(java.awt.event.ActionEvent evt) {
    //...................................................................................
    String first = textFirstName.getText();
    String last = textLastName.getText();
    String job = textJobTitle.getText();
    String ID = textID.getText();
    int newID = Integer.parseInt(ID);

    try {
        String insertSql = "INSERT INTO Workers (ID,FIRST_NAME,LAST_NAME,JOB_TITLE) VALUES(" + newID + ",'" + first + "','" + last + "','" + job + "')";
        stmt.executeUpdate(insertSql);


        rs.next();
        int id_col = rs.getInt("ID");
        String id = Integer.toString(id_col);
        String first2 = rs.getString("First_Name");
        String last2 = rs.getString("Last_Name");
        String job2 = rs.getString("Job_Title");

        textID.setText(id);
        textFirstName.setText(first2);
        textLastName.setText(last2);
        textJobTitle.setText(job2);

    } catch (SQLException err) {
        System.out.println(err.getMessage());
    }

(清除了阻塞段(false,trues..)但现在我有这个错误:

结果集未打开。不允许进行“下一步”操作。验证自动提交是否关闭。

)

【问题讨论】:

  • rs 定义在哪里?
  • 学习使用prepared statements。以防 LAST_NAME 是 O'Reilly 例如。
  • 你能用 err.printStackTrace() 代替 err.getMessage(),然后在问题中发布吗?它可能有助于找到真正的错误。
  • 我认为您在这里遗漏了一个查询,也许它在发布时丢失了?你正在做一个插入,但你似乎期待一个选择。在本教程中,他们正在对结果进行“选择”,因此是结果集。你正在做一个插入,它没有结果,因此你的错误。

标签: java


【解决方案1】:

冻结是因为您正在 UI 的线程中执行 JDBC 调用。你不应该这样做,而是创建一个新线程并在那里执行工作。

更新UI的时候,也不要直接调用Swing方法,而是使用SwingUtilities.invokeLater()

您得到的错误是因为您正在执行插入操作,但您似乎期望进行选择。在本教程中,他们正在对结果进行“选择”,因此是结果集。你正在做一个插入,它没有结果,当你调用 next 时,它解释了错误。只需在 executeUpdate() 下添加以下内容即可:

String sql = "SELECT * FROM Workers";
rs = stmt.executeQuery(sql);

【讨论】:

  • 您的建议很好,并解释了临时冻结的原因,但不是永久冻结的原因,也不是他的错误消息。简而言之,它没有回答主要问题。
  • 谢谢,但问题并没有说程序永久冻结。我的猜测是程序尝试连接到数据库,超时,给出可能需要一些时间的错误,并且在执行此操作时 UI 冻结。但我读到:为什么我的应用程序冻结,而不是为什么我的数据库连接不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多