我创建了一个项目(我使用这个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未打开。不允许“下一步”操作。验证自动提交是否已关闭。
)
答案 0 :(得分:1)
冻结是因为您正在UI的线程中进行JDBC调用。你永远不应该这样做,而是创建一个新线程并在那里执行工作。
更新UI时,也不要直接调用Swing方法,而是使用SwingUtilities.invokeLater()
您得到的错误是因为您正在进行插入,但您似乎期望选择。在教程中,他们正在使用结果进行“选择”,因此结果集。你正在做一个没有结果的插入,这解释了你下次调用时的错误。只需在executeUpdate()下添加以下内容即可:
String sql = "SELECT * FROM Workers";
rs = stmt.executeQuery(sql);