附加的sqlite数据库和Android中的多线程问题

时间:2014-02-20 05:46:01

标签: android multithreading android-sqlite

我想了解ATTACHED sqlite数据库的多线程访问所涉及的问题。显而易见的是,一个SQLiteOpenHelper确保一个数据库连接,从而确保对数据库的一个序列化访问。当一个'子'数据库连接两次时,在两个不同的'父'SQLiteOpenHelper s /两个不同的父数据库连接下会发生什么?

Q1:如何序列化对附加子数据库的访问?

Q2:在这种情况下如何实现提前写入记录?

要清楚,这就是我所描述的情景:

ASQLiteOpenHelper instanceA = new ASQLiteOpenHelper( context, dbnameA, null, version);
BSQLiteOpenHelper instanceB = new BSQLiteOpenHelper( context, dbnameB, null, version);

instanceA.getWritableDatabase().execSQL( "ATTACH '" + dbnameChild + "' AS child" );
instanceB.getWritableDatabase().execSQL( "ATTACH '" + dbnameChild + "' AS child" );

通过instanceAinstanceB同时安全地写'孩子'吗?读书怎么样?如果为父级启用了writeahead日志记录,是否也为子级启用了?如果是,是为child创建的两个单独的预写日志记录日志吗?

2 个答案:

答案 0 :(得分:0)

来自here

  

我们知道没有其他支持as的嵌入式SQL数据库引擎   和SQLite一样多并发。 SQLite允许多个进程拥有   数据库文件立即打开,并为多个进程读取   数据库一下子。当任何进程想要写入时,它必须锁定   整个数据库文件的更新期间。但通常情况下   只需几毫秒。其他进程只是等待作者   完成然后继续他们的业务。其他嵌入式SQL   数据库引擎通常只允许单个进程连接   数据库一下子。

here是关于并发性的大量信息。

答案 1 :(得分:0)

经过一些测试后,我发现ATTACH ed数据库将在第一次ATTACH尝试时被锁定。进一步ATTACH尝试将失败。