公開日:2020/07/02更新日:2020/08/03
【Kotlin】Roomで作成したデータベースに、初期データを投入する方法を解説

- データベース作成時に、初期データを投入したい
- CSVファイルを読み込み、大量のデータを投入したい
RoomによるSQLiteデータベースへのアクセス処理を実装する際、データベース作成時に、あらかじめデータを投入しておきたいということがあると思います。
本記事では、初期データの投入方法と、CSVファイルを読み込み、大量の初期データを投入する方法について解説致します。
目次
初期データを投入する方法
初期データの投入方法を解説するにあたり、以下のようなUserエンティティを使用することにします。
初期データの投入は、データベースが作成されたタイミングで行います。
データベースが作成されるタイミングを知るため、17行目のaddCallback()で、RoomDatabase.Callbackを実装しております。
これにより、データベースが作成されたタイミングで、onCreate()が呼ばれるので、その時にデータの投入を行います。
上記のサンプルでは、データ挿入用のSQL文を作成た後、execSQL()でSQL文を実行することで、初期データの投入を行なっております。
CSVファイルを読み込み、大量のデータを取り込む
CSVファイルの作成
続いては、初期データをあらかじめCSVファイルで用意しておき、データベース作成時にCSVファイルを読み込んで初期データを投入する方法を解説致します。
まずは、CSVファイルを作成する方法をについて紹介致します。今回は、Googleのスプレッドシートで作成致します。
スプレッドシートを開きデータを入力していきます。列をテーブルのカラムのように入力していきます。1行1行が1つのデータとなります。
データが入力できましたら、CSVファイルとして出力します。CSVファイルとして出力するには、ファイル -> ダウンロード -> カンマ区切りの値を選択します。
これで以下のようなCSVファイルが出力されると思います。各データは、カンマで区切られております。
最後に、出来上がったCSVファイルを、Assets Folderに格納しておきます。Assets Folderは、src/mainフォルダを右クリックし、New -> Folder -> Assets Folderから作成できます。Assets Folderの作成場所が指定できますので、main直下に作成されるようにしておきましょう。
CSVファイルの読み込み
では、作成したCSVファイルを読み込んで、初期データを投入する処理を実装してみましょう。先ほどの実装に、CSVファイルを読み込む処理を追加致します。
21行目の、context.resources.assetsで、AssetManagerを取得しております。
22行目では、データ挿入のSQL文の冒頭部分を格納しておきます。
24行目から26行目では、CSVファイルからBufferedReaderの生成を行なっております。
そして、27行目のreadLine()で、ファイルの読み込みを行なっております。readLine()は、CSVファイルの1行分の情報を読み込む関数です。
29行目から33行目は、while文となっております。readLine()でデータが読み込めなくなるまで繰り返されます。while文の中では、カンマでデータを区切り、Userエンティティのカラムにマッチするよう、SQL文として追加しております。
CSVファイルのデータを全て読み込むと、while文を抜け、SQL文が完成します。しかし、最後にカンマが付いた状態となり、エラーとなってしまうので、39行目で最後の文字を取り除いております。
最後に、execSQL()でSQL文を実行することで、CSVファイルのデータを投入することができます。
以上、CSVファイルから大量のデータを取り込む方法でした。