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

Tai*_*ran 6 database android

我使用读写数据库没有任何问题.但我无法找出差异.我在互联网上搜索但不太清楚.有人能告诉我区别吗?在哪种情况下我应该使用getWritableDatabase()getReadableDatabase()

Mar*_*ark 21

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

但是,如果无法返回可写数据库,getWritableDatabase()则会失败,而getReadableDatabase()将尝试返回READ_ONLY数据库.

  • 非常精确和有用 (2认同)

Imr*_*ana 9

检查参考

公共同步SQLiteDatabase getReadableDatabase()

自:API级别1

创建和/或打开数据库.这将是getWritableDatabase()返回的同一对象,除非某些问题(例如完整磁盘)要求以只读方式打开数据库.在这种情况下,将返回只读数据库对象.如果问题是固定的,以getWritableDatabase未来()调用可能会成功,在这种情况下,只读数据库对象将被关闭和读/写对象将在未来返回.

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

a database object valid until getWritableDatabase() or close() is called. 
Run Code Online (Sandbox Code Playgroud)

如果无法打开数据库,则抛出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 
Run Code Online (Sandbox Code Playgroud)

如果无法打开数据库进行写入,则抛出SQLiteException

  • @ tai.tran2008首先查看para:**这个(getReadableDatabase())将是getWritableDatabase()返回的相同对象,除非某些问题(如完整磁盘)要求数据库以只读方式打开**.因此,如果您只想读取名称,请使用**getReadableDatabase()**,使其简化以了解您的需求. (2认同)