我正在使用一个类扩展SQLiteOpenHelper,如下所示:
public class PocketSQLite extends SQLiteOpenHelper {
public String TableNames[];
public String FieldNames[][];
public String FieldTypes[][];
public static String NO_CREATE_TABLES = "no tables";
private String message = "";
public PocketSQLite(Context context, String name, CursorFactory factory, int version, String tableNames[], String fieldNames[][], String fieldTypes[][]) {
super(context, name, factory, version);
TableNames = tableNames;
FieldNames = fieldNames;
FieldTypes = fieldTypes;
}
@Override
public void onCreate(SQLiteDatabase db) {
if (TableNames == null) {
message = NO_CREATE_TABLES;
return;
}
for (int i = 0; i < TableNames.length; i++) {
String sql = "CREATE TABLE " + TableNames[i] + "(";
for (int j = 0; j < FieldNames[i].length; j++)
sql += FieldNames[i][j] + " " + FieldTypes[i][j] + ",";
sql = sql.substring(0, sql.length() - 1);
sql += ")";
db.execSQL(sql);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
for (int i = 0; i < TableNames[i].length(); i++) {
String sql = "DROP TABLE IF EXISTS " + TableNames[i];
db.execSQL(sql);
}
onCreate(db);
}
}
如您所见,构造函数将输入表的字段。如何更新onUpgrade函数以向现有表添加新字段?
例如:
旧表(2个字段):“名称”,“电话”
新表(3个字段):“姓名”,“电话”,“电子邮件”
答案 0 :(得分:0)
首先,当您进行这样的结构更改时,需要更改数据库版本。然后,在升级方法中,编写sql语句,这将修改表。
下次运行你的应用程序时,将调用onUpgrade方法,并执行你的sql语句,这将修改你的表。
http://www.w3schools.com/sql/sql_alter.asp
您也可以删除表格,但正如您所说,您将丢失现有数据。