次のように、クラスを使用して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フィールド):「名前」、「電話」、「メール」