난 당신이 무슨 짓을했는지 슈퍼 예를 통해 전달 된 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)
하지만, 단순히 0이 아닌 양의 부호화 된 버전, 즉 슈퍼 방법에 전달되며, 그 버전에서 사용되는 결과 것이다.
나는() 버전을 검색 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 위의 생산 테스트를위한 317,894,922,398,581,088,243,210
는/I는 다음과 같은 방법을 사용 : - 1 MainActivity에서 다음 코드로 Android: PRAGMA statements that set data don't work
에 따라에는 ExecSQL를 사용할 필요가 작동하지 않습니다
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;
}
참고
SO46316125DBHlpr dbhlpr = new SO46316125DBHlpr(this);
dbhlpr.showDBVersion();
dbhlpr.alterDBVersion(dbhlpr.getWritableDatabase(),1,0);
분명히 매개 변수를 변경합니다 (첫 번째 버전은 변경할 버전이므로 현재 버전과 일치해야하며 두 번째 버전은 변경할 버전입니다. 첫 번째가 일치하는 경우). 위의 예제는 버전 1을 버전 0으로 바꿀 것입니다.
아직까지는이 부분을 살펴 보지 못했지만 현재 할 수있는 것은 (getWriteableDatabase()를 사용하여) 현재 데이터베이스를 열고 ' execSQL' 메소드, 다음 SQL' PRAGMA user_version = 1'. 그러나 버전 번호를 변경하는 방법은 다음과 같습니다. 나는 내가 생각해 낼 수있는 것을보기 위해 약간의 연극을 가질 것이다. – MikeT
답변에 따라 PRAGMA를 사용하여 버전을 변경할 필요가 없습니다. – MikeT