我正在尝试从两个线程从Android应用程序中的SQLite DB请求一些数据。那么是否可以在Android中的同一数据库实例上同时调用getReadableDatabase((和getWritableDatabase((。
是的,这是可能的,但你需要小心,因为如果你调用close
来关闭与数据库的连接,另一个线程在尝试读/写时会崩溃。
答案是肯定的,但在某些情况下也是否定的。
基本上getReadableDatabase
将得到一个"可写">数据库,除非数据库只能被读取。如果数据库不可写,getWritableDatabase
将失败。
根据 :-
getReadableDatabase 在 API Level 1 SQLiteDatabase 中添加
getReadableDatabase((
创建和/或打开数据库。
这将是
getWritableDatabase()
返回的相同对象,除非出现问题, 如磁盘已满,则要求数据库以只读方式打开。在 在这种情况下,将返回只读数据库对象。如果 问题已修复,将来调用
getWritableDatabase()
可能会成功, 在这种情况下,将关闭只读数据库对象,并且 读/写对象将在将来返回。
获取可读数据库
因此,如果数据库是可写的,那么肯定是的,但如果数据库只是可读的,那么getWritableDatabase
可能会失败,因此对于这种罕见的情况是否。
通常,除非特别想要处理无法打开数据库进行写入的情况,否则使用getWritableDatabase
可能是真正需要的,即 RealgetReadableDatabase
允许您在数据库不可写但可以读取时进行一些访问。它通常不会防止写入/更新数据库。