AndroidでのSQLite入門
まずプロジェクトにGradleプラグインを適用してください。
plugins {
id("app.cash.sqldelight") version "2.1.0"
}
repositories {
google()
mavenCentral()
}
sqldelight {
databases {
create("Database") {
packageName.set("com.example")
}
}
}
plugins {
id "app.cash.sqldelight" version "2.1.0"
}
repositories {
google()
mavenCentral()
}
sqldelight {
databases {
Database { // This will be the name of the generated database class.
packageName = "com.example"
}
}
}
TIP
SQLDelightのファイルを見つけて編集しやすくするために、Android Studioのファイルビューを「Android」ビューから「Project」ビューに切り替えることをお勧めします。
SQLステートメントは、src/main/sqldelight
配下の.sq
ファイルに記述します。 通常、.sq
ファイルの最初のステートメントはテーブルを作成しますが、インデックスを作成したり、デフォルトコンテンツを設定することもできます。
CREATE TABLE hockeyPlayer (
player_number INTEGER PRIMARY KEY NOT NULL,
full_name TEXT NOT NULL
);
CREATE INDEX hockeyPlayer_full_name ON hockeyPlayer(full_name);
INSERT INTO hockeyPlayer (player_number, full_name)
VALUES (15, 'Ryan Getzlaf');
これらのステートメントに基づいて、SQLDelight は、データベースの作成やステートメントの実行に使用できる、関連する Schema
オブジェクトを持つ Database
クラスを生成します。Database
クラスは generateSqlDelightInterface
Gradle タスクによって生成されます。このタスクは、.sq
ファイルを編集する際に SQLDelight IDE プラグインによって自動的に実行されるほか、通常の Gradle ビルドの一部としても実行されます。
生成されたデータベースをコードで使用するには、SQLDelight Androidドライバーの依存関係をプロジェクトに追加する必要があります。
dependencies {
implementation("app.cash.sqldelight:android-driver:2.1.0")
}
dependencies {
implementation "app.cash.sqldelight:android-driver:2.1.0"
}
以下に示すようにドライバーのインスタンスを構築でき、生成された Schema
オブジェクトへの参照が必要です。
val driver: SqlDriver = AndroidSqliteDriver(Database.Schema, context, "test.db")
INFO
AndroidSqliteDriver
は、ドライバーが構築される際にスキーマを自動的に作成またはマイグレーションします。 必要に応じて、マイグレーションを手動で実行することもできます。詳細については、[コードマイグレーション]を参照してください。
型安全なクエリの定義
SQLDelightは、.sq
ファイル内のラベル付きSQLステートメントに対して型安全な関数を生成します。
selectAll:
SELECT *
FROM hockeyPlayer;
insert:
INSERT INTO hockeyPlayer(player_number, full_name)
VALUES (?, ?);
insertFullPlayerObject:
INSERT INTO hockeyPlayer(player_number, full_name)
VALUES ?;
ラベル付きステートメントを含む各.sq
ファイルには、「Queries」オブジェクトが生成されます。 たとえば、上記のPlayer.sq
ファイルに対してはPlayerQueries
オブジェクトが生成されます。 このオブジェクトを使用して、実際のSQLステートメントを実行する生成された型安全な関数を呼び出すことができます。
fun doDatabaseThings(driver: SqlDriver) {
val database = Database(driver)
val playerQueries: PlayerQueries = database.playerQueries
println(playerQueries.selectAll().AsList())
// [HockeyPlayer(15, "Ryan Getzlaf")]
playerQueries.insert(player_number = 10, full_name = "Corey Perry")
println(playerQueries.selectAll().AsList())
// [HockeyPlayer(15, "Ryan Getzlaf"), HockeyPlayer(10, "Corey Perry")]
val player = HockeyPlayer(10, "Ronald McDonald")
playerQueries.insertFullPlayerObject(player)
}
以上です!他の機能については、サイドバーの他のページを確認してください。
SQLiteのバージョン
Androidプロジェクトの場合、SQLDelight Gradleプラグインは、プロジェクトの minSdkVersion
設定に基づいてSQLiteのダイアレクトバージョンを自動的に選択します。各Android SDKレベルでサポートされているSQLiteバージョンのリストは、こちらを参照してください。