class HogeHelper extends SQLiteOpenHelper { private Context mContext; public HogeHelper(Context context, CursorFactory factory) { super(context, CategoryTable.FILENAME, factory, CategoryTable.VERSION); mContext = context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE `tbl`(`_id` INTEGER PRIMARY KEY AUTOINCREMENT,`name` TEXT);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion == 1 && newVersion == 2) { // ordカラムの追加 db.execSQL("ALTER TABLE `tbl` ADD `ord` INTEGER AFTER `name`;"); // 既存データの取得(idだけ) Cursor cursor = db.query( "tbl", new String[]{ "_id" }, null, null, null, null, "_id ASC" ); // 既存データのordカラムのデータを入れる int ord = 0; if(cursor.moveToFirst()){ do{ db.execSQL( "UPDATE `tbl` SET `ord` = ? WHERE `_id` = ?", new String[]{String.valueOf(ord), String.valueOf(cursor.getLong(cursor.getColumnIndex("_id")))} ); ord = ord + 10; } while(cursor.moveToNext()); } cursor.close(); } } }
onUpgradeメソッド内で以下のようにデータの取得はできる。
Cursor cursor = db.query( "tbl", new String[]{"_id"}, null, null, null, null, "_id ASC" );
onUpgradeメソッド内で以下のようにデータの変更はできない。
db.update(...);
dbはread専用であると怒られる。以下のように書込専用のdbを取得することもできない。
getWritableDatabase();
getWritableDatabaseメソッドがhelperのonUpgradeをcallするためである。