2010-04-06 78 views
1

我們可以同時使用數據庫的同一連接對象與多個數據庫表一起工作嗎?一次插入到數據庫的多個表中

假設我有與數據的基礎上連接的相同的對象數據的基礎上的表2插入在表1,並在同一時間也插入的值的值。

我在代碼中使用sqlite數據庫,並在commit()時獲取數據庫鎖定異常。

回答

1

任何事務都會鎖定整個數據庫。在任何正在進行的事務中,您都無法訪問sqlite數據庫。

+0

我得到了下面的異常,這是涉及到數據庫鎖定異常,也可能導致數據庫鎖定異常例外:()調用稱爲狀態不當堆棧跟蹤java.lang.IllegalStateException:()調用稱爲在org.ibex不適當的狀態.nestedvm.Runtime.call(Runtime.java:655)位於org.sqlite.NestedDB.call(NestedDB.java:406)org.sqlite上的org.ibex.nestedvm.Runtime.call(Runtime.java:647)。 org.sqlite.NestedDB.reset(NestedDB.java:135)在org.sqlite.RS.close(RS.java:98) – rajkumari 2010-04-07 06:47:57

+0

上的NestedDB.call(NestedDB.java:389)或由於obj而發生數據庫鎖定異常Connection.commit()行 – rajkumari 2010-04-07 06:48:20

+0

鎖定的異常非常多意味着DB正在使用中。你必須使用一些包裝庫來進行數據庫操作,如果你缺少某些東西,請檢查它的文檔。並用代碼更新帖子。 – 2010-04-07 10:27:34

1

你需要一個語句每個表,都使用相同的連接:

INSERT INTO t1(x, y, z) VALUES(1, 2, 4); 
INSERT INTO t2(a, b, c) VALUES("FOO", "BAR", 2.1); 

這些應該被插入作爲一個獨立的工作單元。

如果你從同一個對象插入值,你可能做錯了。 「一次只說一次」表明不應該有必要在兩個不同的表中保存相同的值。我會插入一次,並使用觸發器將其放入歷史記錄表或類似的東西。

+0

我得到了下面的異常,這是涉及到數據庫鎖定異常,也可能導致數據庫鎖定異常 例外:所謂在org.ibex不適當的狀態()調用:調用()調用不恰當的狀態堆棧跟蹤java.lang.IllegalStateException .nestedvm.Runtime.call(Runtime.java:655)位於org.sqlite.NestedDB.call(NestedDB.java:406)org.sqlite上的org.ibex.nestedvm.Runtime.call(Runtime.java:647)。 NestedDB.call(NestedDB.java:389)在org.sqlite.NestedDB.reset(NestedDB.java:135)在org.sqlite.RS.close(RS.java:98) – rajkumari 2010-04-07 05:57:30

+0

不知道。發佈一些代碼。 – duffymo 2010-04-07 10:12:37