Android getWritableDatabase()和getReadableDatabase()之间的区别?

Android getWritableDatabase()和getReadableDatabase()之间的区别?,android,database,Android,Database,我使用读写数据库没有任何问题。但我无法找出区别。我在网上搜索过,但不太清楚。有人能告诉我区别吗?在这种情况下,我应该使用getWritableDatabase()还是getReadableDatabase()?检查 公共同步SQLiteDatabase getReadableDatabase() 自:API级别1 创建和/或打开数据库。这将是返回的同一个对象 通过getWritableDatabase()执行,除非出现一些问题,例如磁盘已满, 要求以只读方式打开数据库。在这种情况下,一个 将返回

我使用读写数据库没有任何问题。但我无法找出区别。我在网上搜索过,但不太清楚。有人能告诉我区别吗?在这种情况下,我应该使用
getWritableDatabase()
还是
getReadableDatabase()

检查

公共同步SQLiteDatabase getReadableDatabase() 自:API级别1

创建和/或打开数据库。这将是返回的同一个对象 通过getWritableDatabase()执行,除非出现一些问题,例如磁盘已满, 要求以只读方式打开数据库。在这种情况下,一个 将返回只读数据库对象。如果问题已解决,则 将来对getWritableDatabase()的调用可能会成功,在这种情况下 只读数据库对象将被关闭,读/写对象 将在将来返回

与getWritableDatabase()类似,此方法可能需要很长时间才能返回,因此您不应该从应用程序主线程调用它,包括从ContentProvider.onCreate()调用。 返回

投掷 无法打开数据库时发生SQLiteException

公共同步SQLiteDatabase getWritableDatabase() 自:API级别1

创建和/或打开将用于读取和 写作。第一次调用它时,将打开数据库 和onCreate(SQLiteDatabase)、onUpgrade(SQLiteDatabase、int、int) 和/或将调用onOpen(SQLiteDatabase)

一旦成功打开,数据库将被缓存,因此您可以调用 方法,每次需要写入数据库时。(一定要 当不再需要数据库时调用close())错误,例如错误 权限或磁盘已满可能会导致此方法失败,但将来 如果问题得到解决,尝试可能会成功

数据库升级可能需要很长时间,您不应该从应用程序主线程调用此方法,包括从ContentProvider.onCreate()调用。 返回

投掷
SQLiteException如果数据库无法打开进行写入

从我删除的答案中获取(此问题与该问题重复)

在正常情况下,
getReadableDatabase()
将返回相同的值
getWritableDatabase()
返回的可写数据库

但是,如果无法返回可写数据库,
getWritableDatabase()
将失败,而
getReadableDatabase()
将尝试返回一个
只读
数据库


两者的不同之处在于磁盘已满的情况。
getReadableDatabase()
getWritableDatabase()
任务都是打开/创建数据库

但是当磁盘已满时,如果调用
getWritableDatabase()
,应用程序就会崩溃。但是,
getReadbleDatabase()
在这种情况下可以正常工作。因为,
getReadableDatabase()
阻止写入操作并允许读取操作


不要从应用程序主线程调用这些方法,比如Android中
MainActivity
onCreate()
方法或任何回调方法。

主要区别在于-

getReadbleDatabase()-

  • 创建和/或打开数据库。这将是返回的同一个对象 通过getWritableDatabase()执行,除非出现一些问题,例如磁盘已满, 要求以只读方式打开数据库。在这种情况下,一个 将返回只读数据库对象。如果问题解决了, 将来对getWritableDatabase()的调用可能会成功,在这种情况下 只读数据库对象将被关闭,读/写对象 将在将来返回
getWritableDatabase()-

  • 创建和/或打开将用于读取和 写作。第一次调用它时,将打开数据库 和onCreate(SQLiteDatabase)、onUpgrade(SQLiteDatabase、int、int) 和/或将调用onOpen(SQLiteDatabase)。一旦打开 成功地缓存了数据库,因此可以调用此方法 每次需要写入数据库时。(一定要打电话 不再需要数据库时关闭())错误,如错误 权限或磁盘已满可能会导致此方法失败,但将来 如果问题得到解决,尝试可能会成功

如果数据库崩溃
GetReadableDatabase()
将返回一个只读/只读对象
虽然
GetWriteableDatabase()
将失败。

我读过它,但我找不到不同之处和结论?@oers:谢谢你,因为我的英语很差。@tai.tran2008看第一段:这个(getReadableDatabase())将是GetWriteableDatabase()返回的同一个对象,除非出现问题,如磁盘已满,则需要以只读方式打开数据库。所以,如果您想只读,请使用getReadableDatabase(),因为名称简化了它,可以理解您想要的内容。
a database object valid until getWritableDatabase() or close() is called. 
a read/write database object valid until close() is called