OR Mapper ORMLiteを使ってみる -Helperクラスの作成-
import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; /** * オブジェクトの永続化および更新のためのHelperです。 * このクラスはDAOの提供も行います。 */ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { // アプリケーション固有の名前を指定 private static final String DATABASE_NAME = "helloAndroid.db"; // 永続化対象のオブジェクトを更新したときは常に手動で更新する必要がある。 private static final int DATABASE_VERSION = 7; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } /** * 永続化対象のクラスを検索します。 * * @return 永続化対象のクラスのList */ protected List<Class<?>> findPersistedClasses() { List<Class<?>> classes = new ArrayList<Class<?>>(); classes.add(Account.class); return classes; } /** * DBを最初に作成するときに呼び出されます。 * オブジェクトを永続化するためのTableをここで作成します。 */ @Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { try { Log.i(DatabaseHelper.class.getName(), "onCreate"); for (Class clazz : findPersistedClasses()) { TableUtils.createTable(connectionSource, clazz); } } catch (SQLException e) { Log.e(DatabaseHelper.class.getName(), "Can't create database", e); throw new RuntimeException(e); } } /** * DBのversionを手動で更新したときに呼び出されます。 * 新しいテーブルを再作成するとともに、古いオブジェクトのデータを新しいオブジェクトに適合させることができます。 * 現状は古いテーブルの削除のみを行います。 */ @Override public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { try { Log.i(DatabaseHelper.class.getName(), "onUpgrade"); for (Class clazz : findPersistedClasses()) { TableUtils.dropTable(connectionSource, clazz, true); } onCreate(db, connectionSource); } catch (SQLException e) { Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e); throw new RuntimeException(e); } } /** * connectionをcloseします。 */ @Override public void close() { super.close(); } }
問題は
・オブジェクトを更新するたびに手動でDATABASE_VERSIONをインクリメントしないといけない。
・永続化対象のオブジェクトを手動で追加しないといけない。
@DatabaseTableのついたクラスを自動的に探して追加する仕組みを作ろうとしたんだけど、androidのエミュレータでは動きませんでした。
何でだろ?