클래스의 onCreate()
메서드에서 테이블을 생성하는 명령을 작성하여 SQLiteOpenHelper
클래스를 확장했습니다. 데이터베이스를 열 때 onCreate()
메서드가 처음으로 호출됩니다. 그러나 여전히 company_boxes 테이블이 이미 존재한다고 말하는 오류가 있습니다.오류 SQL 테이블에 테이블을 이미 만들었습니다.
오픈 방법
public DatabaseManager open() {
ourHelper = new DatabaseManager(context);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
에서 OnCreate 방법
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE_TABLE2);
}
DATABASE_CREATE_TABLE2
는
private static final String DATABASE_CREATE_TABLE2 = "CREATE TABLE "
+ DATABASE_TABLE2 + " (" + KEY_ROWID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_PRODUCT
+ " TEXT NOT NULL, " + KEY_PRICE + " TEXT NOT NULL," + KEY_IMAGEID
+ " TEXT NOT NULL);";
가 나는 또한 CREATE TABLE IF NOT EXISTS
과 노력, 정의 whos는 문자열 아래입니다하지만 여전히 그것을주고있다 같은 오류.
다음은 표시되는 스택 추적입니다. 다른 코드는 올바른 보이기 때문에
02-21 07:59:38.296: E/AndroidRuntime(1984): FATAL EXCEPTION: main
02-21 07:59:38.296: E/AndroidRuntime(1984): android.database.sqlite.SQLiteException: table corporate_boxes already exists (code 1): , while compiling: CREATE TABLE corporate_boxes (_id INTEGER PRIMARY KEY AUTOINCREMENT, _name TEXT NOT NULL, _price TEXT NOT NULL,_imageid TEXT NOT NULL);
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
02-21 07:59:38.296: E/AndroidRuntime(1984): at appistic.services.tricouschocolates.categories.DatabaseManager.onCreate(DatabaseManager.java:199)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
02-21 07:59:38.296: E/AndroidRuntime(1984): at appistic.services.tricouschocolates.categories.DatabaseManager.open(DatabaseManager.java:116)
02-21 07:59:38.296: E/AndroidRuntime(1984): at appistic.services.tricouschocolates.Products.onItemSelected(Products.java:51)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.widget.AdapterView.access$200(AdapterView.java:49)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.os.Handler.handleCallback(Handler.java:725)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.os.Handler.dispatchMessage(Handler.java:92)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.os.Looper.loop(Looper.java:137)
02-21 07:59:38.296: E/AndroidRuntime(1984): at android.app.ActivityThread.main(ActivityThread.java:5039)
02-21 07:59:38.296: E/AndroidRuntime(1984): at java.lang.reflect.Method.invokeNative(Native Method)
02-21 07:59:38.296: E/AndroidRuntime(1984): at java.lang.reflect.Method.invoke(Method.java:511)
02-21 07:59:38.296: E/AndroidRuntime(1984): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-21 07:59:38.296: E/AndroidRuntime(1984): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-21 07:59:38.296: E/AndroidRuntime(1984): at dalvik.system.NativeStart.main(Native Method)
CREATE TABLE을 사용하지 않을 때 오류가 발생하지 않으므로 그냥 추측 할 수 있습니다. create 문에서 후행하는'; '을 제거하십시오. – Henry