1

嗨,我正在创建一个存储用户输入密码的应用程序。每当他需要更改密码时,就必须更改数据。我面临的问题是,当我调用 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);
    }
4

2 回答 2

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();
}
于 2013-04-07T12:42:49.297 回答
2

首先,这里是如何以编程方式更改数据库版本,从而强制在下一次调用时调用以打开数据库SQLiteOpenHelperonUpgrade()

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

其次,我不推荐使用这种技术。我只写了这个答案,因为你问如何这样做。这是你的选择。对我来说,我会按照@Boris Strandjev 在他的回答中推荐的方式去做

于 2013-04-08T11:45:25.763 回答