将新字段添加到现有表中

时间:2012-07-19 15:14:27

标签: android sqlite

我正在使用一个类扩展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个字段):“姓名”,“电话”,“电子邮件”

1 个答案:

答案 0 :(得分:0)

首先,当您进行这样的结构更改时,需要更改数据库版本。然后,在升级方法中,编写sql语句,这将修改表。

下次运行你的应用程序时,将调用onUpgrade方法,并执行你的sql语句,这将修改你的表。

http://www.w3schools.com/sql/sql_alter.asp

您也可以删除表格,但正如您所说,您将丢失现有数据。