您好我正在创建一个应用程序,用于存储用户输入的密码。每当他需要更改密码时,都必须更改数据。 我面临的问题是,当我调用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);
}
答案 0 :(得分: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();
}
答案 1 :(得分:1)
首先以下是如何以编程方式更改数据库版本,因此强制SQLiteOpenHelper
在下次调用时调用onUpgrade()
来打开数据库:
db.execSQL("PRAGMA user_version = " + NEW_VERSION);
第二,我不建议使用此技术。我只写了这个答案,因为你问过如何这样做。这是你的选择。 对我来说,我会按照@Boris Strandjev的回答推荐的方式。