2010-04-06 82 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