我能够读写数据库,但我不知道getWritableDatabase()
和getReadableDatabase()
有何区别。我在网上搜索了很多资料,但并没有得到清晰的解释。请问这两个方法应该如何选择使用?
我能够读写数据库,但我不知道getWritableDatabase()
和getReadableDatabase()
有何区别。我在网上搜索了很多资料,但并没有得到清晰的解释。请问这两个方法应该如何选择使用?
从我删除的答案(这个问题是那个问题的副本)中得出。
正常情况下,
getReadableDatabase()
将返回与getWritableDatabase()
相同的可写数据库。然而,如果无法返回可写数据库,
getWritableDatabase()
将失败,而getReadableDatabase()
将尝试返回一个READ_ONLY
数据库。
请查看参考文献
自:API Level 1
创建并/或打开一个数据库。这将与getWritableDatabase()返回的对象相同,除非出现一些问题,例如满盘,需要只读方式打开数据库。在这种情况下,将返回一个只读数据库对象。如果问题已解决,则将来对getWritableDatabase()的调用可能会成功,在这种情况下,只读数据库对象将被关闭,并将在将来返回读写对象。
与getWritableDatabase()一样,此方法可能需要很长时间才能返回,因此您不应从应用程序主线程中调用它,包括从ContentProvider.onCreate()中调用。 返回值
a database object valid until getWritableDatabase() or close() is called.
如果无法打开数据库,则会抛出SQLiteException异常。
自API Level 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()
阻止写操作并允许读操作。MainActivity
的 onCreate()
方法或任何回调方法)调用这些方法。主要区别是 -
getReadableDatabase() -
getWritableDatabase() -
GetReadableDatabase()
会返回一个只读对象,而GetWriteableDatabase()
则会失败。