2014-11-03 90 views
0

我正在使用AWS RDS(特別是mysql),我正在使用SQL Workbench/J作爲GUI工具。用Java編寫的,在這裏我的服務器端代碼是我的代碼:Java mysql AWS執行成功,然後選擇不返回新值

插入代碼:

try { 
    Statement myStatement = insertConnectionObject.createStatement(); 
    myStatement.executeUpdate("INSERT INTO friends VALUES('buddy', '15', '123');"); 
    myStatement.close(); 
} catch(Exception ex) { 
    // code for handling exceptions 
} finally { 
    myStatement.close(); 
    insertConnectionObject.close(); 
} 

在那之後,我把從同一個表中選擇代碼:

try { 
    Statement myStatement = selectConnectionObject.createStatement(); 
    ResultSet returnedFriends = myStatement.executeQuery("SELECT * FROM friends;"); 
    //unfortunately, the returnedFriends will not return the new inserted value 'buddy' 
} catch(Exception ex) { 
    // code for handling exceptions 
} finally { 
    myStatement.close(); 
    insertConnectionObject. 

不幸的是,返回的朋友不會返回新的插入值'朋友'。

如果我將點擊SQL Workbench/J GUI工具中的'提交任何待處理的數據庫更改'按鈕,然後運行select語句,新值'buddy'將返回。

我到現在爲止試過了什麼?

  1. 對insert和select使用相同的連接對象。
  2. 在insert命令之後和每個select命令之後,打開和關閉連接。
  3. 禁用自動提交併嘗試手動提交。
  4. 通過代碼插入,然後直接從數據庫中選擇。

回答

0

我的問題是一樣簡單和惱人的,因爲可以 - 顯然,我不得不關閉工作臺GUI從代碼,這是怎樣的工作時有線,並且需要Workbench/AWS團隊進行更深入的調查。

無論如何,關閉此界面後,一切工作。

感謝您的幫助!

1

您是否嘗試過setAutoCommit(true)連接上,以防萬一?

此外,如果您的選擇只是爲了得到一個新的密鑰不要忘記你可以撥打電話myStatement.getGeneratedKeys()與更新。

+0

是的我試過第一個建議沒有運氣,連接已經設置爲自動提交。 select語句由我在所描述的流程中忽略的代碼的不同部分調用,只是爲了使其更清晰。 – 2014-11-03 09:46:29

1

您應該使用executeQuery()進行選擇。 executeUpdate()只會返回int。它應該給編譯時錯誤,你確定代碼是編譯而不是運行最後的工作版本嗎?

的executeUpdate(字符串SQL)執行給定的SQL語句,其可以 爲INSERT,UPDATE,或DELETE語句或SQL語句 返回任何諸如SQL DDL語句。

因此改變你的選擇代碼如下:

ResultSet returnedFriends = myStatement.executeQuery("SELECT * FROM friends;"); 
+0

這是我在附加到這個問題的代碼中所犯的一個錯誤,我會立即改變它。在我的代碼中,我使用insert語句的executeUpdate,但select是executeQuery – 2014-11-03 09:49:09