首页 > 解决方案 > 我们可以在 android sqlite DB 中同时填充 getWritableDatabase() 和 getReadableDatabase() 请求吗

问题描述

我正在尝试从两个线程从 Android 应用程序中的 SQLite DB 请求一些数据。因此,是否可以在 android 中的同一 db 实例上同时调用 getReadableDatabase() 和 getWritableDatabase()。

标签: androidsqlite

解决方案


答案是肯定的,但在某些情况下也是否定的。

除非数据库只能读取,否则基本上getReadableDatabase会得到一个“可写”的数据库。getWritableDatabase如果数据库不可写,则会失败。

按照 :-

在 API 级别 1 SQLiteDatabase 中添加的getReadableDatabase

getReadableDatabase()

创建和/或打开数据库。

这将与返回的对象相同,getWritableDatabase()除非某些问题(例如磁盘已满)要求以只读方式打开数据库。在这种情况下,将返回一个只读数据库对象。

如果问题得到解决,未来的调用getWritableDatabase()可能会成功,在这种情况下,只读数据库对象将被关闭,读/写对象将在未来返回。

获取可读数据库

因此,如果数据库是可写的,那么肯定是 Yes,但如果数据库是只读的,那么就有getWritableDatabase可能失败,因此对于这种可能很少见的情况,No。

通常,除非特别想处理无法打开数据库进行写入的情况,否则getWritableDatabase可能确实需要使用。即getReadableDatabase如果数据库不可写但可以读取,则确实允许您进行一些访问。它通常不会防止写入/更新数据库。


推荐阅读