これまで私のSQLite
データベースの自動化された(ほぼほとんど)onCreate
/onUpgrade
メソッドに大いに依存してきました。それはうまくいっていて、データベースのバージョン番号を変更してonUpgrade
を自動的に実行しなければなりませんでした。最初のクエリで読み取り専用データベースを使用している場合、Androidはデータベースをアップグレードできません
しかし、今、私は私のデータベースに列を追加しようとしたときにその例外に実行して、バージョン番号を変更しています:
SQLiteException: Can't upgrade read-only database from version X to Y
は自分のアプリケーションの最初のクエリ案の定、私のコードを見てみますSELECT
クエリです。要求に書き込みアクセスが必要ないため、getReadableDatabase
を使用して接続を開きます。
私はこのような問題をどのように解決すればよいのだろうかと思っていました。常にを使用する必要がありますか? (私のアップデートをパスするための回避策として)確かに、両方のメソッドが使用され、必要なときに接続が読み取り専用アクセスに最適化されているためです。私は利益を失いたくはありません。
「両方のメソッドが存在するのは、そのメソッドが使用され、必要なときに読み取り専用アクセス用に最適化されているためです」 - 最適化AFAIKはありません。 'execSQL()'のようなものへの呼び出しをブロックするだけです。私は時々これにぶつかり、何が起こっているのか、特に一貫していないので、私の人生を理解することができません。おそらく妥当な回避策は 'getWriteableDatabase()'を使うことです。 – CommonsWare
これは異常です...私の現在の回避策は、getWritableDatabase()だけを行い、終了して、必要に応じてデータベースをチェックし、作成し、アップグレードするアプリケーションの "スタート"にメソッドを持たせることです。ああ...(@CommonsWareのところでは、StackOverflowでのAndroidの質問について、一貫して偉大で十分な情報を得て、多くの助けになりました。) – Guillaume
あなたはとてもですようこそ! – CommonsWare