Genta Hirauchi

公開日: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が削除されます。

サンプルコード

最後に、データベースへのアクセス部分のサンプルコードを載せておきます。