我使用读取和写入数据库没有任何问题。但是我找不到其中的区别。我上网查了一下,不太清楚,有没有人能告诉我有什么不同,哪种情况下应该用getWritableDatabase()还是getReadableDatabase()
发布于 2012-06-01 13:04:44
公共同步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
发布于 2012-08-01 10:11:53
摘自我删除的答案here (这个问题是那个问题的副本)。
在正常情况下,
getReadableDatabase()将返回与getWritableDatabase()相同的可写数据库。
但是,如果无法返回可写数据库,则getWritableDatabase()将失败,而getReadableDatabase()将尝试返回READ_ONLY数据库。
发布于 2015-08-13 15:22:37
两者的不同之处在于磁盘变满的情况。getReadableDatabase()和getWritableDatabase()的任务都是打开/创建数据库。
但是当磁盘满的时候,如果你调用getWritableDatabase(),应用程序就会崩溃。但是,在这种情况下,getReadbleDatabase()工作得很好。因为,getReadableDatabase()阻止写操作并允许读操作。
不要从应用程序主线程调用这些方法,比如从Android中MainActivity的onCreate()方法或任何回调方法。
https://stackoverflow.com/questions/10844578
复制相似问题