私はあなたが何をしたか、スーパーなどを経由して渡された0のバージョンをコーディングすることだったと思われます -
public static final int DBVERSION = 0;
public SO46316125DBHlpr(Context context) {
super(context, DBNAME, null, DBVERSION);
}
これはVersion must be >= 1, was 0
などを含む例外が発生します -
09-20 21:16:40.631 1840-1840/mjt.soqanda E/AndroidRuntime: FATAL EXCEPTION: main
Process: mjt.soqanda, PID: 1840
java.lang.RuntimeException: Unable to start activity ComponentInfo{mjt.soqanda/mjt.soqanda.MainActivity}: java.lang.IllegalArgumentException: Version must be >= 1, was 0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.IllegalArgumentException: Version must be >= 1, was 0
at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:99)
at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:77)
at mjt.soqanda.SO46316125DBHlpr.<init>(SO46316125DBHlpr.java:23)
しかし、単に非ゼロコーディング、スーパーメソッドに渡された正のバージョンは、その後使用されて、そのバージョンになります。
私は()のバージョンを取得しPRAGMA user_version
続く、PRAGMA user_version=0
を使用して、バージョン0(ようにDBを設定していました: -
09-20 21:29:35.117 19172-19172/? D/DBVERSION: The Database User Version is 1
09-20 21:29:35.118 19172-19172/? D/CHGDBVERSION: Attempting to alter DB Version from 1 to new version 0
09-20 21:29:35.152 19172-19172/? D/CHGDBVERSION: DB Version changed successfully, DB Version is now 0
私は、使用したバージョン100: -
public static final int DBVERSION = 100;
public SO46316125DBHlpr(Context context) {
super(context, DBNAME, null, DBVERSION);
}
だから、これは直接ジャンプバージョン100(ONUPGRADE方法は空である)ごとのように: - 。1つの作品だけでなくもちろん
09-20 21:35:45.344 27937-27937/mjt.soqanda D/DBVERSION: The Database User Version is 100
012試験のため
/Iは、次のメソッドを使用する上に製造する: -
public void showDBVersion() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.rawQuery("PRAGMA user_version",null);
if (csr.moveToFirst()) {
Log.d("DBVERSION","The Database User Version is " + csr.getString(0));
}
}
public int alterDBVersion(SQLiteDatabase db, int fromversion, int toversion) {
int current_version = -1;
int changed_version = -1;
Cursor csr = db.rawQuery("PRAGMA user_version;",null);
if (csr.moveToFirst()) {
current_version = csr.getInt(0);
} else {
Log.d("CHGDBVERSION","Unable to get the current version.");
return current_version;
}
if (current_version == fromversion) {
Log.d("CHGDBVERSION","Attempting to alter DB Version from " +
Integer.toString(fromversion) +
" to new version " +
Integer.toString(toversion)
);
db.rawQuery("PRAGMA user_version=" + Integer.toString(toversion) + ";",null); //NOTE 1
db.execSQL("PRAGMA user_version=" + Integer.toString(toversion) + ";");
}
csr = db.rawQuery("PRAGMA user_version;",null);
if (csr.moveToFirst()) {
changed_version = csr.getInt(0);
} else {
Log.d("CHGDBVERSION","Unable to get the new/changed version.");
return -2;
}
if (current_version != fromversion || changed_version != toversion) {
Log.d("CHGDBVERSION",
"DB Version was not changed as requested. Version is now " +
Integer.toString(changed_version));
return -3;
} else {
Log.d("CHGDBVERSION","DB Version changed successfully, DB Version is now " +
Integer.toString(changed_version));
}
return 0;
}
注1が動作しないMainActivity
に次のコードで
Android: PRAGMA statements that set data don't work
に従ってExecSQLメソッドを使用する必要が
SO46316125DBHlpr dbhlpr = new SO46316125DBHlpr(this);
dbhlpr.showDBVersion();
dbhlpr.alterDBVersion(dbhlpr.getWritableDatabase(),1,0);
明らかにパラメータを変更しています(最初は変更するバージョン、現在のバージョンはそれに一致する必要があり、2番目は変更するバージョンです)最初のものがマッチした場合)。上記の例では、バージョン1がバージョン0に変更されます。
私はまだこれを完全には見ていませんが、あなたができることは、現在のデータベースを開いて(getWriteableDatabase()を使用して) execSQL'メソッド、次のSQL 'PRAGMA user_version = 1'を実行します。しかし、それはどのようにバージョン番号の変更を処理するのです。私はおそらく私が思いつくことを見るために少し遊びをするでしょう。 – MikeT
回答ごとに、PRAGMAを使用してバージョンを変更する必要はありません。 – MikeT