私のアプリには既に第三者のデータベースがありますlibrary。ライブラリにはドロップテーブル機能がないようです。だから私は直接SQLiteOpenHelper APIを使用してそれを変更することを考えていた。これは可能ですか?AndroidでSQLクエリを手動で実行する
SQLiteOpenHelperを拡張し、ライブラリで使用されているのと同じdb名を付けたクラスを作成しました。
私は作成したdbクラスが反映されているかどうかを確認するために、アプリケーションクラスで初期化します。アプリを実行している場合
SQLiteDatabase db = new SqliteDatabaseHelper(this).getReadableDatabase();
L.w("version: " + db.getVersion());
L.w("path: " + db.getPath());
SqliteDatabaseHelper helper = new SqliteDatabaseHelper(this);
helper.onUpgrade(db, 1, 2); // this line suppose to invoke the drop table query
は、onUpgrade()
メソッドが呼び出されていないようです。
あなたはネイティブSQLiteヘルパーの使用経験は一度もありませんでしたので、ここで何が起こっているのか分かりません。私の目的は、onUpgradeのクエリが実行されるかどうかを確認することです。しかし、テーブルはまだデータベースに存在しています。
どうすればこの問題を回避できますか?
コードの定数 'DATABASE_VERSION'を1より大きい整数に変更すると、' onUpgrade() 'が呼び出されます。あなたの元の質問については、私はまだいくつかのさらなる情報が必要です。 SQLiteHelperクラスとライブラリの両方で同じデータベースにアクセスすることは可能ですが、ライブロックとデッドロックとデータの整合性に注意する必要があります。 – NitroNbg
私は参照してください。情報をありがとう。その場合、明示的にonUpgradeを呼び出す必要はありません.DATABASE_VERSIONを変更するだけです。そうですか? – AimanB
はい。次回に 'SQLiteOpenHelper'をインスタンス化すると、' super(context、DATABASE_NAME、null、DATABASE_VERSION);は、実行中のアプリケーションが必要とするデータベースとデバイスストレージのデータベースが一致するかどうかを確認します。 – NitroNbg