0

クラスを拡張するクラスonCreate()のメソッドでテーブルを作成するコマンドを書きました。データベースを開くときに、メソッドが初めて呼び出されます。しかし、まだテーブルcorporate_boxesが既に存在するというエラーがあります。DatabaseManagerSQLiteOpenHelperonCreate()

オープンメソッド

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たが、それでも同じエラーが発生します。

これが表示されているスタックトレースです。

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)
4

2 に答える 2

0

データベースのバージョン番号を変更し、一度試してみてください。

于 2013-02-21T09:01:34.813 に答える
0

;他のコードは正しいように見えるため、おそらく問題は文字です。この文字は不可解な問題を引き起こす可能性があるため、DML ステートメントから削除してみてください。動作するはずです。

if not existsクエリで使用するときにもこのエラーがスローされる理由がわかりません.dbonCreate()で「アクション」を使用するのは初めてで、dbは常に読み取りまたは書き込み、またはその両方のためにのみ開かれるためです。

于 2013-02-21T08:44:33.807 に答える