繁体   English   中英

ormLite callInTransaction是否锁定数据库?

[英]Does ormLite callInTransaction lock the database?

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

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可能会尝试在createOrUpdate(pairAA)createOrUpdate(pairBB)之间执行queryAll() createOrUpdate(pairBB) 这意味着AA变为2,查询读取时BB仍为1。 还是事务管理器会在可调用对象的整个执行过程中锁定该表/数据库,从而使查询不可能发生(仅允许在可调用对象之前或之后进行查询)?

TransactionManager.callInTransaction()关闭自动提交,并在执行call()方法后提交更改;如果call()方法抛出异常,则回滚更改。

因此,无法通过您描述的queryAll()获得情况。 此外,Android SQLite允许多个读取器,但一次仅允许一个写入器。详细信息: https : //stackoverflow.com/a/7740305/2055854

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM