gpt4 book ai didi

java - ormLite callInTransaction 是否锁定数据库?

转载 作者:行者123 更新时间:2023-12-01 12:03:29 26 4
gpt4 key购买 nike

我想知道 ormLite 在执行事务时是否锁定数据库。我有 table :

key | value
AA | 1
BB | 1

我正在运行两个数据库操作。一次修改多个条目:

new Callable<Void>() {
public Void call() throws SQLException {
pairAA = new DbEntry("AA", 2);
pairBB = new DbEntry("BB", 2);
dao.createOrUpdate(pairAA);
dao.createOrUpdate(pairBB);

return null;
}
}

如果我尝试在不同的线程上运行第一个,使用 TransactionManager.callInTransaction() sumAllValues(dao.queryAll()) 的结果是否有可能得到 3 ?在不同线程上运行意味着 JVM 可能会尝试执行 queryAll()之间createOrUpdate(pairAA)createOrUpdate(pairBB) 。这意味着当查询读取它时,AA 变为 2,BB 仍然为 1。或者事务管理器会在可调用的整个执行过程中锁定该表/数据库,从而使查询不可能发生(只允许在可调用之前或之后进行查询)?

最佳答案

TransactionManager.callInTransaction() 关闭自动提交并在执行 call() 方法后提交更改,或者在 call() 方法抛出异常时回滚它们。

因此不可能使用您描述的 queryAll() 获得情况。Android SQLite 还允许多个读取器,但一次只能有一个写入器详细信息:https://stackoverflow.com/a/7740305/2055854

关于java - ormLite callInTransaction 是否锁定数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27844660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com