2016-07-28 2 views
0

私のアプリには既に第三者のデータベースがあります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のクエリが実行されるかどうかを確認することです。しかし、テーブルはまだデータベースに存在しています。

どうすればこの問題を回避できますか?

+0

コードの定数 'DATABASE_VERSION'を1より大きい整数に変更すると、' onUpgrade() 'が呼び出されます。あなたの元の質問については、私はまだいくつかのさらなる情報が必要です。 SQLiteHelperクラスとライブラリの両方で同じデータベースにアクセスすることは可能ですが、ライブロックとデッドロックとデータの整合性に注意する必要があります。 – NitroNbg

+0

私は参照してください。情報をありがとう。その場合、明示的にonUpgradeを呼び出す必要はありません.DATABASE_VERSIONを変更するだけです。そうですか? – AimanB

+0

はい。次回に 'SQLiteOpenHelper'をインスタンス化すると、' super(context、DATABASE_NAME、null、DATABASE_VERSION);は、実行中のアプリケーションが必要とするデータベースとデバイスストレージのデータベースが一致するかどうかを確認します。 – NitroNbg

答えて

1

SQLiteOpenHelperクラスは、独自のデータベースのバージョン管理に役立ちます。

サードパーティ製のコードで管理されているデータベースには使用できません。

openDatabase()で直接データベースを開きます。

関連する問題