1

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

4

1 回答 1

0

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

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

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

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

于 2012-07-19T15:19:49.337 回答