冻结gui jdbc,保存数据时,为什么?

时间:2013-05-18 13:48:26

标签: java

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

当我想要保存新记录时,程序正在冻结。(我希望当我保存新数据时,程序将能够使用next和prev按钮)

我使用以下代码更改了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 ..)但现在我有这个错误:

  

ResultSet未打开。不允许“下一步”操作。验证自动提交是否已关闭。

1 个答案:

答案 0 :(得分:1)

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

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

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

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