SQLDelight 官方的文档有点简略,有些步骤看不懂,而网上找到的大部分文章都是跨平台的配置, 而我只想做 Android 单平台的,于是详细记录了一下配置过程。
app build.gradle
注意是 app 模块的 build.gradle, 而不是整个项目的 build.gradle.
plugins {
id "app.cash.sqldelight" version "2.0.0-alpha05"
}
sqldelight {
databases {
Database { // This will be the name of the generated database class.
packageName = "com.sunzhongwei.someapp"
}
}
}
dependencies {
implementation "app.cash.sqldelight:android-driver:2.0.0-alpha05"
}
新建 SQL 文件
由 Android 视图切换到 Project 视图:
新建目录
app/src/main/sqldelight/com/sunzhongwei/someapp/data/
注意,sqldelight 后面的路径要与 build.gradle 中配置的 packageName 对应上。然后再新建一个 data 目录即可。
然后在这个目录下新建一个 Item.sq 文件。
创建 sq 后缀的文件之后,Android Studio 会立即提示你安装 SQLDelight 插件。
.sq 文件
例如:
CREATE TABLE `items` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` TEXT NOT NULL,
`num` INTEGER,
`notes` TEXT NOT NULL
);
INSERT INTO items (name, notes, num)
VALUES ('apple', 'bed', 1);
selectAll:
SELECT * FROM items;
测试
例如,可以在 MainActivity.kt 中加入:
class MainActivity : AppCompatActivity() {
val driver: SqlDriver = AndroidSqliteDriver(Database.Schema, this, "test.db")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
val database = Database(driver)
val itemQueries: ItemQueries = database.itemQueries
println(itemQueries.selectAll().executeAsList())
}
// ...
}
编译运行,就能在 Logcat 中看到日志了(搜索过滤 items):
[Items(id=1, name=apple, num=1, notes=bed)]
同时通过 App Inspection 也能看到新建的 test.db 数据库了。
测试成功!这可比 Room 那套罗里吧嗦的玩意清爽太多了🍸
生成的代码在哪里
编译之后,通过 git status 是查看不到新增的 kotlin 代码文件的,因为其在 build 目录,默认被 gitignore 忽略了。
app/build/generated/sqldelight/code/Database/debug/com/sunzhongwei/someapp/data/Items.kt
目录结构
> tree app/build/generated/sqldelight/code/Database/debug/com/sunzhongwei/someapp/
├── Database.kt
├── app
│ └── DatabaseImpl.kt
└── data
├── ItemQueries.kt
└── Items.kt
2 directories, 4 files
Items.kt
这个是根据 .sq 文件中的 SQL 建表语句自动生成的 data class 代码,类似 Room 的 Entity 定义:
package com.sunzhongwei.someapp.`data`
import kotlin.Long
import kotlin.String
public data class Items(
public val id: Long,
public val name: String,
public val num: Long?,
public val notes: String,
)
探索更多关于 SQLDelight
📖 Android Room 替代品 SQLDelight 中文入门教程
参考
- https://cashapp.github.io/sqldelight/2.0.0-alpha05/android_sqlite/
- 好不容易找到的一个使用 SQLDelight 的纯粹 Android 项目:https://github.com/TarasMazepa/github_showcase_client
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式