我已经使用onUpgrade()添加了一个表,现在我才意识到需要添加另一个表。我想做到这一点而又不会丢失任何先前的数据或表。
我尝试从onUpgrade删除所有内容以添加一个新表,但是它只是使应用程序崩溃了。我想保留所有3个已经存在的表并添加一个新表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+ TABLE_NAME+ "(Datee DATE, Challan INTEGER PRIMARY KEY,Lr VARCHAR, Than INTEGER, Quality TEXT, Decise DATE, Panna INTEGER, Caustic Date, Party TEXT, Marka Text)");
db.execSQL("Create table "+ TABLE_NAME2+" (id INTEGER PRIMARY KEY AUTOINCREMENT, challan INTEGER UNIQUE, date DATE, than INTEGER, marka VARCHAR, quality VARCHAR ) ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+ TABLE_NAME);
db.execSQL("Drop table if exists "+ TABLE_NAME2 );
onCreate(db);
db.execSQL("Create table "+ TABLE_NAME3+" (id INTEGER PRIMARY KEY AUTOINCREMENT, marka VARCHAR, indate DATE, qty INTEGER, outdate DATE, stamp DATE Default CURRENT_DATE ) ");
}
答案 0 :(得分:0)
您可以在表定义中使用 IF NOT EXISTS 子句。
这样,您可以使用:-
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS "+ TABLE_NAME+ "(Datee DATE, Challan INTEGER PRIMARY KEY,Lr VARCHAR, Than INTEGER, Quality TEXT, Decise DATE, Panna INTEGER, Caustic Date, Party TEXT, Marka Text)");
db.execSQL("Create table IF NOT EXISTS "+ TABLE_NAME2+" (id INTEGER PRIMARY KEY AUTOINCREMENT, challan INTEGER UNIQUE, date DATE, than INTEGER, marka VARCHAR, quality VARCHAR ) ");
db.execSQL("Create table IF NOT EXISTS "+ TABLE_NAME3+" (id INTEGER PRIMARY KEY AUTOINCREMENT, marka VARCHAR, indate DATE, qty INTEGER, outdate DATE, stamp DATE Default CURRENT_DATE ) ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onCreate(db);
}
因为这样的现有表将不会被创建,因为它们不会被删除。
如果您想迎合更复杂的情况(例如,如果该应用已经发布),则可以使用oldVersion和/或newVersion值,并对每个版本更改都有特定的例程。