2013-04-07 128 views
0

嗨,我正在創建一個存儲用戶輸入密碼的應用程序。並且每當他需要更改密碼時,都必須更改數據。 我面臨的問題是,當我打電話給DBHelper類(我創建完成我所有的數據庫工作)時,如果可用,它不刪除表。自動升級數據庫版本

如果有人告訴我如何在調用DBHelper類時刪除表中的條目會更有幫助。

我意識到OnCreate和OnUpgrade函數除了第一次創建數據庫時都沒有執行。

也自動更改數據庫版本也有助於我猜測,但我不知道該怎麼辦? 這裏是DBhelper類

public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXISTS '" + DATABASE_TABLE+"'"); 
      db.execSQL("CREATE TABLE " + DATABASE_TABLE +" (" + 
       KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+ 
       KEY_ID +" INTEGER, "+ 
       KEY_X +" INTEGER, "+ 
       KEY_Y +" INTEGER);" 
       ); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS '" + DATABASE_TABLE+"'"); 
     onCreate(db); 
    } 

public long createEntry(int name, int sx, int sy) { 
     // TODO Auto-generated method stub 
     ContentValues cv=new ContentValues(); 
     cv.put(KEY_ID, name); 
     cv.put(KEY_X, sx); 
     cv.put(KEY_Y, sy); 
     return ourDatabase.insert(DATABASE_TABLE, null, cv); 
    } 
+1

只需增加數據庫版本就可以了。 (知道它晚了)。 – 2015-02-06 16:45:23

回答

2

我的代碼在數據庫中更改的行應該不會影響架構版本。這應該作爲適當的查詢來處理數據庫條目來執行。

您可能會發現使用這種方法:

public void clearDatabase(Context context) { 
    DatabaseHelper helper = new DBHelper(context); 
    SQLiteDatabase database = helper.getWritableDatabase(); 
    database.delete(DATABASE_TABLE, null, null); //erases everything in the table. 
    database.close(); 
} 
+0

這不回答問題,這就是onUpgrade未執行的原因。 – 2015-02-18 22:57:41

1

這裏首先是如何通過編程更改數據庫的版本,從而迫使SQLiteOpenHelperonUpgrade()下次調用打開數據庫:

db.execSQL("PRAGMA user_version = " + NEW_VERSION);

,我不推薦使用此techniqu即我只寫了這個答案,因爲你問到如何做到這一點。這是你的選擇。 對於我來說,我會按照@Boris Strandjev在他的回答中推薦的方式進行操作。