自动升级数据库版本

时间:2013-04-07 12:35:31

标签: android android-sqlite database-versioning

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

2 个答案:

答案 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的回答推荐的方式