第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JDBC getGeneratedKeys()方法是否始終與插入元素的順序相同

JDBC getGeneratedKeys()方法是否始終與插入元素的順序相同

桃花長相依 2021-04-05 14:18:41
我executeBatch()與JDBC一起使用以插入多行,并且我想為另一個插入獲取插入行的ID,為此我使用以下代碼:insertInternalStatement = dbConncetion.prepareStatement(INSERT_RECORD, generatedColumns);for (Foo foo: foosHashSet) {    insertInternalStatement.setInt(1, foo.getMe());    insertInternalStatement.setInt(1, foo.getMe2());    // ..    insertInternalStatement.addBatch();}insertInternalStatement.executeBatch();// now get inserted idstry (ResultSet generatedKeys = insertInternalStatement.getGeneratedKeys()) {     Iterator<Foo> fooIterator= foosHashSet.iterator();     while (generatedKeys.next() && fooIterator.hasNext()) {         fooIterator.next().setId(generatedKeys.getLong(1));     } }它工作正常并且返回id,我的問題是:如果我進行迭代,getGeneratedKeys()并且foosHashSetID將以相同的順序返回,以便從數(shù)據(jù)庫返回的每個ID都屬于對應(yīng)的Foo實例?當(dāng)我使用多線程時,上面的代碼同時在多個線程中運行怎么辦?還有其他解決方案嗎?我有兩個表foo1和foo2,我想先插入foo1記錄,然后將其主ID用作foo2外鍵。
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經(jīng)驗 獲得超13個贊

如果getGeneratedKeys未在JDBC規(guī)范中定義對批處理執(zhí)行的支持,則行為將取決于所使用的驅(qū)動程序。我希望任何支持生成的用于批處理執(zhí)行的鍵的驅(qū)動程序都可以返回ID,以便將它們添加到批處理中。

但是,您使用的事實Set是有問題的。大多數(shù)集合的迭代順序未定義,并且可能在每次迭代之間發(fā)生變化(通常只有在修改后才能更改,但是從理論上講,您不能假設(shè)有關(guān)該順序的任何信息)。您需要使用保證順序的商品,例如aList或a LinkedHashSet。

在這里應(yīng)用多線程可能不是一個好主意:您一次只能使用一個單線程的JDBC連接??紤]到多線程,要么需要正確鎖定,要么需要您分擔(dān)工作負(fù)載,以便可以使用單獨的連接。很難說這會提高還是降低性能。


查看完整回答
反對 回復(fù) 2021-04-18
  • 3 回答
  • 0 關(guān)注
  • 264 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號