一次插入多个数据库表中
Posted
技术标签:
【中文标题】一次插入多个数据库表中【英文标题】:inserted in multiple tables of database at a time 【发布时间】:2010-04-06 10:01:20 【问题描述】:我们可以同时处理具有相同数据库连接对象的多个数据库表吗?
假设我在表 1 中插入了值,同时也在数据库的表 2 中插入了具有相同数据库连接对象的值。
我在代码中使用 sqlite 数据库并在 commit() 时遇到数据库锁定异常。
【问题讨论】:
【参考方案1】:任何事务都会锁定整个数据库。在任何正在进行的事务期间,您都无法访问 sqlite 数据库。
【讨论】:
我得到了以下异常,这与数据库锁定异常有关还是可能导致数据库锁定异常 Exception:call() 在不适当的状态下调用 stacktrace java.lang.IllegalStateException: call() 在不适当的情况下调用状态在 org.ibex.nestedvm.Runtime.call(Runtime.java:655) 在 org.ibex.nestedvm.Runtime.call(Runtime.java:647) 在 org.sqlite.NestedDB.call(NestedDB.java:406)在 org.sqlite.NestedDB.call(NestedDB.java:389) 在 org.sqlite.NestedDB.reset(NestedDB.java:135) 在 org.sqlite.RS.close(RS.java:98) 或者是由于 obj Connection.commit() 行导致数据库锁定异常 锁定异常几乎意味着数据库正在使用中。您必须为数据库操作使用一些包装库,检查它的文档以防您遗漏某些东西。并用代码更新帖子。【参考方案2】:每个表需要一个语句,所有语句都使用相同的连接:
INSERT INTO t1(x, y, z) VALUES(1, 2, 4);
INSERT INTO t2(a, b, c) VALUES("FOO", "BAR", 2.1);
这些应该作为一个工作单元插入。
如果你从同一个对象插入值,你可能做错了什么。 “Say It Once and Only Once”表明不需要在两个不同的表中保存相同的值。我会插入一次并使用触发器将其放入历史表或类似的东西中。
【讨论】:
我得到了以下异常,这与数据库锁定异常有关还是可能导致数据库锁定异常 Exception:call() 调用状态不正确 stacktrace java.lang.IllegalStateException: call() 调用不适当状态在 org.ibex.nestedvm.Runtime.call(Runtime.java:655) 在 org.ibex.nestedvm.Runtime.call(Runtime.java:647) 在 org.sqlite.NestedDB.call(NestedDB.java:406)在 org.sqlite.NestedDB.call(NestedDB.java:389) 在 org.sqlite.NestedDB.reset(NestedDB.java:135) 在 org.sqlite.RS.close(RS.java:98)以上是关于一次插入多个数据库表中的主要内容,如果未能解决你的问题,请参考以下文章