7

データベースへの読み書きを問題なく使用しています。しかし、私は違いを見つけることができません。インターネットで検索しましたが、よくわかりません。誰でも違いを教えてもらえますか?どの場合に or を使用する必要がありますgetWritableDatabase()getReadableDatabase()?

4

5 に答える 5

22

ここで削除された回答から取得しました(この質問はその質問の複製です)。

通常の状況では、getReadableDatabase()は が返すのと同じ書き込み可能なデータベースを返しますgetWritableDatabase()

ただし、書き込み可能なデータベースを返すことができない場合 getWritableDatabase()は失敗しますが、 はデータベースgetReadableDatabase() を返そうとしREAD_ONLYます。

于 2012-08-01T02:11:52.963 に答える
10

リファレンスを確認してください

パブリック同期SQLiteDatabasegetReadableDatabase()

以来:APIレベル1

データベースを作成および/または開きます。これは、ディスクがいっぱいになるなどの問題でデータベースを読み取り専用で開く必要がない限り、getWritableDatabase()によって返されるオブジェクトと同じになります。その場合、読み取り専用のデータベースオブジェクトが返されます。問題が修正された場合、getWritableDatabase()の将来の呼び出しが成功する可能性があります。その場合、読み取り専用データベースオブジェクトが閉じられ、読み取り/書き込みオブジェクトが将来返されます。

getWritableDatabase()と同様に、このメソッドは戻るのに長い時間がかかる場合があるため、ContentProvider.onCreate()を含め、アプリケーションのメインスレッドから呼び出さないでください。戻り値

a database object valid until getWritableDatabase() or close() is called. 

データベースを開くことができない場合、SQLiteExceptionをスローします

パブリック同期SQLiteDatabasegetWritableDatabase()

以来: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-06-01T05:04:44.160 に答える
0

主な違いは -

getReadbleDatabase() -

  • データベースを作成および/または開きます。これは、ディスクがいっぱいになったなどの問題でデータベースを読み取り専用で開く必要がない限り、getWritableDatabase() によって返されるオブジェクトと同じになります。その場合、読み取り専用のデータベース オブジェクトが返されます。問題が修正された場合、getWritableDatabase() への将来の呼び出しが成功する可能性があります。その場合、読み取り専用データベース オブジェクトは閉じられ、読み取り/書き込みオブジェクトが将来返されます。

getWritableDatabase() -

  • 読み取りと書き込みに使用されるデータベースを作成および/または開きます。これが初めて呼び出されると、データベースが開かれ、onCreate(SQLiteDatabase)、onUpgrade(SQLiteDatabase, int, int) および/または onOpen(SQLiteDatabase) が呼び出されます。正常に開くと、データベースがキャッシュされるため、データベースへの書き込みが必要になるたびにこのメソッドを呼び出すことができます。(データベースが不要になった場合は、必ず close() を呼び出してください。) 不適切なパーミッションやディスクがいっぱいであるなどのエラーにより、このメソッドは失敗する可能性がありますが、問題が修正されれば、今後の試行は成功する可能性があります。
于 2020-01-22T03:56:44.260 に答える