2013-05-18 24 views
0

海蘭我創建一個項目(我maked使用這個turtorial:http://www.homeandlearn.co.uk/java/save_a_new_record.html使用這個數據庫:http://www.homeandlearn.co.uk/java/java_and_databases.html)。在保存數據時凍結gui jdbc,爲什麼?

當我要保存程序凍結新的記錄(我想,當我保存一個新的數據,程序將能夠與next和prev按鈕WROK)

我用這些代碼更改的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()); 
    } 

(清除阻塞段(假,trues ..)但現在我有這個錯誤:

+2

定義了哪個'rs'? – Reimeus

+1

學習使用[預準備語句](http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)。例如,以防LAST_NAME爲「O'Reilly」。 –

+0

你可以做一個err.printStackTrace()而不是err.getMessage(),並在問題中發佈?這可能有助於發現真正的錯誤。 –

回答

1

凍結是因爲你正在做的UI線程一個JDBC調用。你永遠不應該那樣做,而是創建一個新線程並在那裏執行工作。

當更新UI,也不會直接調用Swing方法,但使用SwingUtilities.invokeLater()

你得到的錯誤是因爲你正在做的插入,但你似乎期望一個選擇。在教程中,他們正在做一個「select」結果,因此結果集。你正在做一個插入,它沒有結果,這就解釋了下一次調用時的錯誤。只需在executeUpdate()下面添加以下內容,它將起作用:

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

你的建議很好,並解釋了什麼可能是暫時凍結的原因,但不是造成他的永久凍結的原因,也不是他的錯誤信息。總之,它不回答主要問題。 –

+0

謝謝,但問題並沒有說這個程序是永久凍結的。我的猜測是程序試圖連接到數據庫,超時,給出了可能需要一些時間的錯誤,並且UI在執行時凍結。但我讀到:爲什麼我的應用程序凍結,而不是爲什麼我的數據庫連接無法正常工作。 –

+1

我喜歡。現在我可以對你的答案進行投票。謝謝。 –