我正在向我的应用程序的 SQLite 数据库中添加一个表。我所有的语法都很好,不是问题。但是我在正确创建新表时遇到了一些麻烦。我添加了新表....
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
db.execSQL(CREATE_REQUESTS);
db.execSQL(CREATE_OVERRIDE);
}
我的创建方法。我有 3 张 table 。当我更新版本号时,出现“表请求(指CREATE_REQUESTS)已经创建”的错误。看看我的 onUpgrade 方法...
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}
让我明白 db.execSQL("DROP TABLE IF EXISTS contacts")
这行在 onCreate 方法中引用了我的 DATABASE_CREATE 表,用于删除旧表,然后下一行 onCreate(db);
重新创建它。我没有将请求添加到该 execSQL 行中,这是导致错误的原因。问题是:我不想丢失我已有的两个表中的数据。有没有办法像我尝试做的那样添加一个表,而不丢失所有旧数据?谢谢。
最佳答案
您可以在 onUpgrade
中做任何您想做的事情。您可以使用 ALTER
向表中添加新列。
最坏的情况是,如果您的模式完全不同,您将不得不创建新表,使用旧表中的数据填充它,然后删除旧表。
在任何情况下,onUpgrade
旨在允许顺利升级而不会丢失任何数据。正确实现它完全取决于您。
关于android - 如何更新 SQLite 数据库而不丢失所有现有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188839/