0

我创建了一个项目(我使用此教程制作: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..)但现在我有这个错误:

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

)

4

1 回答 1

1

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

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

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

String sql = "SELECT * FROM Workers";
rs = stmt.executeQuery(sql);
于 2013-05-18T14:03:10.467 回答