2017-06-02 13 views
0

SQLiteOpenHelperのonUpgrade()メソッドでテーブルを削除しようとしています。クエリに「No such table」という奇妙なエラーが表示されます: DROP TABLE IF EXISTS certification_categories私はこれを引き起こしていたものを考え出したテーブルを削除する前にSQLiteで動作しないDROP TABLE if android

android.database.sqlite.SQLiteException: no such table: main.Auction (code 1): , while compiling: DROP TABLE IF EXISTS certification_categories 
                      at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
                      at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
                      at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
                      at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
                      at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
                      at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
                      at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1677) 
                      at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608) 
                      at com.db.DataBaseHelper.recreate(DataBaseHelper.java:135) 
                      at com.db.DataBaseHelper.onDowngrade(DataBaseHelper.java:125) 
                      at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:254) 
                      at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187) 
                      at com.dao.SyncProgressDao.getUnfinishedAuctionIds(SyncProgressDao.java:45) 
                      at com.service.SyncProgressService.getUnfinishedAuctionIds(SyncProgressService.java:69) 
                      at com.background.AuctionSync.syncUnfinished(AuctionSync.java:102) 
                      at com.background.AuctionSync.onHandleIntent(AuctionSync.java:97) 
                      at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.os.HandlerThread.run(HandlerThread.java:61) 
+0

あなたが投稿したコードは、どこにエラーが発生しているのではないですか? 'at com.db.DataBaseHelper.recreate(DataBaseHelper.java:135)' – m0skit0

+1

テーブルにバインドされている外部キー制約はありますか? – Durus

+0

onDowngrade ??? – petey

答えて

0

private static final String DROP_CERTIFICATION_CATEGORIES_TABLE = "DROP TABLE IF EXISTS certification_categories"; 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 
    db.execSQL(DROP_CERTIFICATION_CATEGORIES_TABLE);  
} 

とスタックトレースは次のとおりです。

コードがあります。別のテーブルには、certification_categoriesテーブルとの外部キーの関連付けがありました。

まず、そのテーブルを削除してから、certification_categoriesを削除すると問題が解決しました。

しかし、「いいえ、そのようなテーブル」の代わりに適切なエラーを表示して、簡単にすることができました。

0

オープンデータベース...

private static final String DROP_CERTIFICATION_CATEGORIES_TABLE = "DROP TABLE IF EXISTS certification_categories"; 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 
     db = openorCreateDatabase("DB_NAME",this.MODE_PRIVATE,null); 
     db.execSQL(DROP_CERTIFICATION_CATEGORIES_TABLE);  
} 
関連する問題