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

Android中附加的sqlite数据库和多线程问题,android,multithreading,android-sqlite,Android,Multithreading,Android Sqlite,我想了解多线程访问附加的sqlite数据库所涉及的问题。很明显,一个SQLiteOpenHelper可以确保一个数据库连接,从而确保一个对数据库的序列化访问。当一个“子”数据库在两个不同的“父”数据库连接下连接两次时会发生什么情况 Q1:如何序列化对附加子数据库的访问 问题2:在这种情况下如何实现写前日志记录 清楚地说,这就是我正在描述的场景: ASQLiteOpenHelper instanceA = new ASQLiteOpenHelper( context, dbnameA, null,

我想了解多线程访问附加的sqlite数据库所涉及的问题。很明显,一个
SQLiteOpenHelper
可以确保一个数据库连接,从而确保一个对数据库的序列化访问。当一个“子”数据库在两个不同的“父”数据库连接下连接两次时会发生什么情况

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

问题2:在这种情况下如何实现写前日志记录

清楚地说,这就是我正在描述的场景:

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" );
通过
instanceA
instanceB
写入“child”是否同时安全?读书怎么样?如果为父级启用WriteHead日志记录,是否也为子级启用?如果是,是否为
子项

创建了两个单独的预写日志记录日记帐,来自:

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


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

谢谢,但这并不能解决我的问题,因为Android中锁定的数据库将导致运行时异常。这就是为什么SQLiteOpenHelper被用作一个单例,以确保只有一个数据库连接用于读/写。我的问题是关于在多线程场景中附加数据库的后果。@zyamys我本应该读得更好的。。这里已经很晚了!:(看起来,
DB
是一个共享资源,
SQLiteOpenHelpers
的多个实例正在访问
DB
。如果我错误地解释了您的场景,请纠正我。我认为您错误地解释了我的场景。有三个单独的数据库:dbnameA、dbnameB和dbnameChild。这两个帮助程序分别打开不同的数据库。)数据库。但是,第三个数据库dbnameChild附加在两个帮助程序下。因此,dbnameChild是两个帮助程序的共享资源。是的,这不是直接的,是的,是由于从两个帮助程序附加的结果。因此,您现在需要
同步
对数据库的访问。将代码放在同步块中。