2010-10-13 36 views
1

可以說我有大量的線程使用Java.sql插入到mysql數據庫中。在我執行插入操作後,我想知道剛剛插入的記錄的主鍵。我可以在插入查詢返回的ResultSet上使用getRow()。但是,這個線程安全嗎?或者我應該發射另一個選擇語句來查找我剛剛插入的記錄的主鍵?Java.sql的getRow()線程是否安全?

回答

3

ResultSet不會在javadoc上宣告爲線程安全的,因此假定它不是。如果你有10個線程插入,並且不知何故,他們會得到相同的結果集..奇怪的事情會發生(或至少不能保證是正確的)。

但是,如果你有10個線程,每個線程都做自己的插入,並且每個線程都有它自己的ResultSet ..你很好。請記住,線程安全通常與共享相同的對象而不僅僅是同一個類相關。 ArrayList不是線程安全的,但是如果你有10個不同的線程和10個不同的ArrayList,那麼你很好。這裏和ResultSet一樣。

0

我不認爲getRow()應該是正確的。 getId()將是我的選擇,因爲行ID可能與生成的主鍵不一樣。

我不相信java.sql中的任何實現是線程安全的;連接肯定不是。

務必在事務上下文中進行INSERT。

您需要注意您的隔離級別。如果您不知道這意味着什麼,請檢查javadocs是否爲java.sql.Connection。