如何使用onUpgrade()添加多个表而不会丢失任何数据或表

时间:2019-06-15 18:10:15

标签: java android sqlite

我已经使用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 ) ");

}

1 个答案:

答案 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值,并对每个版本更改都有特定的例程。