2012-11-13 48 views
3

我在問自己是否可以SELECTLAST_INSERT_ID()WHERE條款後一批INSERT s沒有得到表中的數據損壞?我正在考慮多個用戶同時做同樣的事情。我開發了一個JSF應用程序,在這個應用程序中可以實現這種情況我可以在INSERT Batch之後使用LAST_INSERT_ID()進行選擇嗎?

在硬代碼我SELECTINSERT的長相是這樣的:

preparedstatement.addBatch(
       "INSERT INTO table1(all the FIELDS)" 
       + "VALUES(null, ...);" 
    ); 

     preparedstatement.addBatch(
       "INSERT INTO table2(all the FIELDS)" 
       + "VALUES(null, LAST_INSERT_ID(), ...);"   
    ); 


     preparedstatement = connect.prepareStatement(

       "SELECT id FROM table3 WHERE id = LAST_INSERT_ID();" 

    ); 

     preparedstatement.executeBatch(); 
     resultSet = preparedstatement.executeQuery(); 

得到我的問題與此的實施或有一個更好的辦法?

問候

+0

看一看這個網頁;)http://stackoverflow.com/questions/4224228/preparedstatement-with-statement-return-generated-keys – Guillaume

+0

我看到這個頁面上的唯一的事情是從'connect.preparedStatement()'獲得Keys,但在我的情況下,我需要從批處理中獲得密鑰。 – commandcraxx

+0

對不起,我誤解了你的問題......請看下面的答案 – Guillaume

回答

1

你應該罰款,引用MySQL的文檔:

已生成保持在服務器上的 每個連接的ID。這意味着 函數返回給定客戶端的值是第一個由該 客戶端影響AUTO_INCREMENT列的最新語句生成的第一個AUTO_INCREMENT值 。該值不會受到其他客戶端的影響,即使它們生成自己的AUTO_INCREMENT值也是如此。此行爲確保 每個客戶端都可以檢索自己的ID,而不必關心其他客戶端的 活動,並且不需要鎖定或 事務。

MySQL Last_insert_id

+0

非常感謝Guillaume。 – commandcraxx

相關問題