公開日:2020/07/01更新日:2020/08/03
【Kotlin】Roomを使用してSQLiteデータベースにアクセスする方法を解説

- Androidにてデータベースを使用したい。
- RoomライブラリによるSQliteデータベースの実装方法が知りたい。
Android端末には、大量のデータを扱う際に使用するSQLiteというデータベースが組み込まれております。Roomは、SQLiteデータベースを最大限に活用し、スムーズなデータベースアクセスを実現することができるライブラリです。
本記事では、Roomの実装方法およびデータへのアクセス方法について解説しております。
目次
Databaseの実装
依存関係の追加
まずは、Roomライブラリを使用できるようにするため、app直下のbuild.gradleに依存関係を追加します。
Roomライブラリの最新のバージョンに関しましては、Room | Android Developersからご確認頂けます。
Entityの実装
続いて、Entityを実装します。Entityは、データベースのテーブルに該当します。
サンプルでは、UserというEntityクラスを作成します。Userは、id、name、ageをパラメータとして持ちます。
@Entityをつける事で、Entityクラスとなります。
@PrimaryKeyがついたパラメータは、主キーとなります。また、autoGenerate = trueとすると、idが自動生成されます。
@ColumnInfoは、カラム名を指定する際に使用します。@ColumnInfoを指定しなかった場合、パラメータ名がカラム名となります。
Daoの実装
続いて、Daoを実装します。Daoは、データベースにアクセスするメソッドを定義するクラスで、Data Access Objectsの略称で。
サンプルでは、UserDaoというDaoクラスを作成します。UserDaoは、Userの取得、追加、更新、削除のメソッドを実装します。
@Daoをつける事で、Daoクラスとなります。
@Queryは、SQLiteのQueryを実行するアノテーションです。
データの追加、更新、削除は、@Insert、@Update、@Deleteというアノテーションを使用することができます。
Databaseの実装
最後に、Databaseを実装します。Databaseクラスは、RoomDatabaseを継承させて実装します。
サンプルでは、UserDatabaseというDatabaseクラスを作成します。
@Databaseをつける事で、Databaseクラスとなります。entitiesには、データベースのEntityを配列で指定します。今回使用するEntityはUserですので、[User::class]を指定しております。versionには、データベースのバージョンを指定します。
UserDatabaseが使用される際は、getInstance()メソッドからインスタンスの生成が行われるようにしております。データベースのインスタンスがまだ作成されていない場合は新規作成し、すでに作成されている場合は、既存のデータベースインスタンスを返却するようにしております。
Databaseにアクセスする
データの取得
ここからは、データベースにアクセスする方法について解説していきます。まずは、データの取得方法についてです。
UserDatabaseのgetInstance()メソッドを呼び、UserDatabaseのインスタンスを取得しております。
次に、userDao()メソッドを呼び、UserDaoのインスタンスを取得しております。
最後に、getAll()メソッドを呼び、User一覧を取得しております。
データの追加
続いて、データの追加方法についてです。
UserDaoの取得後、新規Userを作成し、insert()メソッドでUserを追加しております。
注目して頂きたいのは、新規Userのidが0になっているということです。Userクラスのidは、@PrimaryKey(autoGenerate = true)としておりました。この場合、idを0にしておく事で、自動的にインクリメント(+1)され、一意のidが付与されます。
データの更新
続いて、データの更新方法についてです。
更新用Userを作成し、update()メソッドでUserを更新しております。
データベースに保存されているどのUserを更新するかは、idで判定されます。同じidのUserが更新されます。
データの削除
最後に、データの削除方法についてです。
削除用Userを作成し、delete()メソッドでUserを削除しております。
更新時と同じように、idが等しいUserが削除されます。
サンプルコード
最後に、データベースへのアクセス部分のサンプルコードを載せておきます。