サーチ…


Android OrmLite over SQLiteの例

ORMLiteは、より多くの標準ORMパッケージの複雑さとオーバーヘッドを回避しながら、JavaオブジェクトをSQLデータベースに永続化するためのシンプルで軽量な機能を提供するオブジェクトリレーショナルマッピングパッケージです。

Android用のOrmLiteは、すぐに使用できるサポートされているSQLiteデータベースで実装されています。これは、SQLiteにアクセスするためのAPIへの直接呼び出しを行います。

グレイドセットアップ

始めるには、パッケージをビルドgradleに含める必要があります。

 // https://mvnrepository.com/artifact/com.j256.ormlite/ormlite-android
compile group: 'com.j256.ormlite', name: 'ormlite-android', version: '5.0'
POJO configuration

次に、POJOをデータベースに永続化するように設定する必要があります。注釈に注意する必要があります。

  • @DatabaseTable注釈を各クラスの上部に追加します。 @Entityを使用することもできます。
  • 永続化する各フィールドの直前に@DatabaseFieldアノテーションを追加します。 @Columnなどを使用することもできます。
  • 少なくともパッケージの可視性を持つ各クラスに、引数のないコンストラクタを追加します。
 @DatabaseTable(tableName = "form_model")
 public class FormModel implements Serializable {

    @DatabaseField(generatedId = true)
    private Long id;
    @DatabaseField(dataType = DataType.SERIALIZABLE)
    ArrayList<ReviewItem> reviewItems;

    @DatabaseField(index = true)
    private String username;

    @DatabaseField
    private String createdAt;

    public FormModel() {
    }

    public FormModel(ArrayList<ReviewItem> reviewItems, String username, String createdAt) {
        this.reviewItems = reviewItems;
        this.username = username;
        this.createdAt = createdAt;
    }
}

上記の例では、4つのフィールドを持つ1つのテーブル(form_model)があります。

idフィールドは自動生成インデックスです。

usernameはデータベースのインデックスです。

注釈の詳細については、 公式ドキュメントを参照してください

データベースヘルパー

続行するには、OrmLiteSqliteOpenHelperクラスを拡張するデータベースヘルパークラスを作成する必要があります。

このクラスは、アプリケーションのインストール時にデータベースを作成およびアップグレードし、他のクラスで使用されるDAOクラスを提供することもできます。

DAOはデータアクセスオブジェクトの略で、すべてのスクラム機能を提供し、単一の永続クラスの処理に特化しています。

ヘルパークラスは、次の2つのメソッドを実装する必要があります。

  • onCreate(SQLiteDatabase sqliteDatabase、ConnectionSource connectionSource);

    onCreateは、アプリケーションが最初にインストールされたときにデータベースを作成します。

  • onUpgrade(SQLiteDatabaseデータベース、ConnectionSource接続ソース、int oldVersion、int newVersion);

    onUpgradeは、アプリケーションを新しいバージョンにアップグレードするときにデータベーステーブルのアップグレードを処理します

データベースヘルパークラスの例:

  public class OrmLite extends OrmLiteSqliteOpenHelper {
    
        //Database name
        private static final String DATABASE_NAME = "gaia";
        //Version of the database. Changing the version will call {@Link OrmLite.onUpgrade}
        private static final int DATABASE_VERSION = 2;
    
        /**
         * The data access object used to interact with the Sqlite database to do C.R.U.D operations.
         */
        private Dao<FormModel, Long> todoDao;
    
    
    
        public OrmLite(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION,
                    /**
                     * R.raw.ormlite_config is a reference to the ormlite_config2.txt file in the
                     * /res/raw/ directory of this project
                     * */
                    R.raw.ormlite_config2);
        }
    
        @Override
        public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
            try {
    
                /**
                 * creates the database table
                 */
                TableUtils.createTable(connectionSource, FormModel.class);
    
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (java.sql.SQLException e) {
                e.printStackTrace();
            }
        }
        /*
            It is called when you construct a SQLiteOpenHelper with version newer than the version of the opened database.
         */
        @Override
        public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource,
                              int oldVersion, int newVersion) {
            try {
                /**
                 * Recreates the database when onUpgrade is called by the framework
                 */
                TableUtils.dropTable(connectionSource, FormModel.class, false);
                onCreate(database, connectionSource);
    
            } catch (SQLException | java.sql.SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * Returns an instance of the data access object
         * @return
         * @throws SQLException
         */
        public Dao<FormModel, Long> getDao() throws SQLException {
            if(todoDao == null) {
                try {
                    todoDao = getDao(FormModel.class);
                } catch (java.sql.SQLException e) {
                    e.printStackTrace();
                }
            }
            return todoDao;
        }
    }

オブジェクトをSQLiteに永続化する

最後に、オブジェクトをデータベースに保持するクラス。

     public class ReviewPresenter {
    Dao<FormModel, Long> simpleDao;


    public ReviewPresenter(Application application) {
        this.application = (GaiaApplication) application;
        simpleDao = this.application.getHelper().getDao();
    }

    public void storeFormToSqLite(FormModel form) {

        try {
            simpleDao.create(form);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        List<FormModel> list = null;
        try {
// query for all of the data objects in the database
            list = simpleDao.queryForAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
// our string builder for building the content-view
        StringBuilder sb = new StringBuilder();
        int simpleC = 1;
        for (FormModel simple : list) {
            sb.append('#').append(simpleC).append(": ").append(simple.getUsername()).append('\n');
            simpleC++;
        }
        System.out.println(sb.toString());
    }
    
    //Query to database to get all forms by username
    public List<FormModel> getAllFormsByUsername(String username) {
        List<FormModel> results = null;
        try {
            results = simpleDao.queryBuilder().where().eq("username", PreferencesManager.getInstance().getString(Constants.USERNAME)).query();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return results;
    }
}

上記のクラスのコンストラクタでのDOAのアクセサは、次のように定義されます。

 private OrmLite dbHelper = null;

/*
Provides the SQLite Helper Object among the application
 */
public OrmLite getHelper() {
    if (dbHelper == null) {
        dbHelper = OpenHelperManager.getHelper(this, OrmLite.class);
    }
    return dbHelper;
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow