我使用读写数据库没有任何问题。但我无法找出区别。我在互联网上搜索过,但不是很清楚。谁能告诉我区别?在哪种情况下我应该使用getWritableDatabase()
or getReadableDatabase()
?
5 回答
取自我在此处删除的答案(此问题与该问题重复)。
在正常情况下,
getReadableDatabase()
将返回由getWritableDatabase()
.但是,如果无法返回可写数据库,
getWritableDatabase()
则会失败,而getReadableDatabase()
会尝试返回READ_ONLY
数据库。
检查参考
公共同步 SQLiteDatabase getReadableDatabase ()
自:API 级别 1
创建和/或打开数据库。这将与 getWritableDatabase() 返回的对象相同,除非某些问题(例如磁盘已满)需要以只读方式打开数据库。在这种情况下,将返回一个只读数据库对象。如果问题得到解决,未来对 getWritableDatabase() 的调用可能会成功,在这种情况下,只读数据库对象将被关闭,并且将来会返回读/写对象。
与 getWritableDatabase() 一样,此方法可能需要较长时间才能返回,因此不应从应用程序主线程调用它,包括从 ContentProvider.onCreate() 调用。退货
a database object valid until getWritableDatabase() or close() is called.
如果无法打开数据库,则抛出 SQLiteException
公共同步 SQLiteDatabase getWritableDatabase ()
自:API 级别 1
创建和/或打开将用于读取和写入的数据库。第一次调用时,将打开数据库并调用 onCreate(SQLiteDatabase)、onUpgrade(SQLiteDatabase, int, int) 和/或 onOpen(SQLiteDatabase)。
一旦打开成功,数据库就会被缓存,所以每次需要写入数据库时都可以调用这个方法。(确保在不再需要数据库时调用 close()。)权限错误或磁盘已满等错误可能会导致此方法失败,但如果问题得到解决,以后的尝试可能会成功。
数据库升级可能需要很长时间,您不应该从应用程序主线程调用此方法,包括从 ContentProvider.onCreate()。退货
a read/write database object valid until close() is called
如果无法打开数据库进行写入,则抛出 SQLiteException
两者的区别在于磁盘已满时的情况。getReadableDatabase()
和任务都是getWritableDatabase()
打开/创建数据库。
但是,如果您调用getWritableDatabase()
. 但是,getReadbleDatabase()
在这种情况下工作正常。因为,getReadableDatabase()
块写入操作并允许读取操作。
不要从应用程序主线程调用这些方法,如 Android 中的onCreate()
方法MainActivity
或任何回调方法。
主要区别在于——
getReadbleDatabase() -
- 创建和/或打开数据库。这将与 getWritableDatabase() 返回的对象相同,除非某些问题(例如磁盘已满)需要以只读方式打开数据库。在这种情况下,将返回一个只读数据库对象。如果问题得到解决,未来对 getWritableDatabase() 的调用可能会成功,在这种情况下,只读数据库对象将被关闭,并且将来会返回读/写对象。
getWritableDatabase() -
- 创建和/或打开将用于读取和写入的数据库。第一次调用时,将打开数据库并调用 onCreate(SQLiteDatabase)、onUpgrade(SQLiteDatabase, int, int) 和/或 onOpen(SQLiteDatabase)。一旦打开成功,数据库就会被缓存,所以每次需要写入数据库时都可以调用这个方法。(确保在不再需要数据库时调用 close()。)权限错误或磁盘已满等错误可能会导致此方法失败,但如果问题得到解决,以后的尝试可能会成功。
如果您的数据库崩溃GetReadableDatabase()
将返回一个只读/只读对象,而GetWriteableDatabase()
将失败。