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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

桃花長(zhǎng)相依 2021-04-05 14:18:41
我executeBatch()與JDBC一起使用以插入多行,并且我想為另一個(gè)插入獲取插入行的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,我的問題是:如果我進(jìn)行迭代,getGeneratedKeys()并且foosHashSetID將以相同的順序返回,以便從數(shù)據(jù)庫返回的每個(gè)ID都屬于對(duì)應(yīng)的Foo實(shí)例?當(dāng)我使用多線程時(shí),上面的代碼同時(shí)在多個(gè)線程中運(yùn)行怎么辦?還有其他解決方案嗎?我有兩個(gè)表foo1和foo2,我想先插入foo1記錄,然后將其主ID用作foo2外鍵。
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊

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

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

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


查看完整回答
反對(duì) 回復(fù) 2021-04-18
  • 3 回答
  • 0 關(guān)注
  • 275 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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