2010-11-22 23 views
75

可能重複的ID:
How to get the insert ID in JDBC?的MySQL和Java的 - 獲取最後插入值(JDBC)

嗨,我使用JDBC通過對數據庫連接的Java應用。

現在,我做一些插入查詢,我需要得到最後插入的值的ID(所以,在stmt.executeUpdate之後)。

我不需要類似SELECT id FROM table ORDER BY id DESC LIMIT 1,因爲我可能有併發問題。

我只需要檢索與最後一個插入關聯的id(關於我的Statement的實例)。

我嘗試這樣做,但看來它不會對JDBC工作:每risultato = -1時間

public Integer insertQueryGetId(String query) { 
    Integer numero=0; 
    Integer risultato=-1; 
    try { 
     Statement stmt = db.createStatement(); 
     numero = stmt.executeUpdate(query); 

     ResultSet rs = stmt.getGeneratedKeys(); 
     if (rs.next()){ 
      risultato=rs.getInt(1); 
     } 
     rs.close(); 

     stmt.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     errore = e.getMessage(); 
     risultato=-1; 
    } 
    return risultato; 
} 

其實,我也得到java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

我怎樣才能解決這個問題呢?由於人們#1 :)

+0

看到我的問題:http://stackoverflow.com/questions/4224228/preparedstatement-with-statement-return-generated-keys – 2010-11-22 14:55:30

+0

重複[如何獲取插入ID在JDBC?](http:// stackoverflow .com/questions/1915166/how-to-get-the-insert-id-in-jdbc) – BalusC 2010-11-22 14:59:01

回答

147

難道你不只是改變:

numero = stmt.executeUpdate(query); 

到:

numero = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS); 

看看爲JDBC Statement接口的文檔。

更新:顯然這個答案有很多混淆,但我的猜測是,困惑的人並沒有在被問到的問題的背景下閱讀它。如果你拿到OP提供的代碼並替換我建議的單行(第6行),那麼一切都將起作用。 numero變量完全不相關,它的值在設置後永遠不會被讀取。

+1

You Rock !!! heheh,即時通訊不能閱讀這個警告信息:) – markzzz 2010-11-22 15:00:09

108

或者你可以這樣做:

Statement stmt = db.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); 
numero = stmt.executeUpdate(); 

ResultSet rs = stmt.getGeneratedKeys(); 
if (rs.next()){ 
    risultato=rs.getInt(1); 
} 

但使用肖恩光明的答案,而不是您的方案。