Android 开发:关于 SQLDelight 入门

简介

SQLDelight 是一个跨平台的数据库,它与传统的注释处理和反射生成代码的方式完全相反。

比起支持跨平台这一特点,SQLDelight 有一个更为重要的特点:它能够将 SQL 代码转换为 Kotlin、Java 或者原生代码,从而支持 Android、iOS、Web 等不同的平台。

就算使用诸如 Room 数据库之类的传统的、平台特定的库,也可以仅用 SQL 这一门语言轻松地创建数据库表和操作。

SQLDelight 需要开发者能自己编写 SQL 查询,这既是 SQLDelight 的优势也是它的劣势。作为一名 Android 开发人员,我不喜欢编写除了 Kotlin/Java 以外的代码,但另一方面,它给了我支持跨平台的机会。

但是说实话,开发者开发一个移动端应用程序时,就算对 SQL 的基础编程方法和语法了解地不深入,也可以写出 SQL 代码并运行编译。

集成

把 SQLDelight 插件添加到项目级 Gradle 文件中,如下面的代码所示:

// 顶级构建文件,可以在其中添加所有子项目/模块的通用配置选项。buildscript { ext.kotlin_version = “1.4.32” repositories { google() jcenter() // SQLDelight 支持存储库 mavenCentral() maven { url ‘https://www.jetbrains.com/intellij-repository/releases’ } maven { url “https://jetbrains.bintray.com/intellij-third-party-dependencies” } } dependencies { classpath “com.android.tools.build:gradle:4.1.3” classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” // SQL Delight 插件 classpath ‘com.squareup.sqldelight:gradle-plugin:1.5.0’ }}allprojects { repositories { google() jcenter() }}task clean(type: Delete) { delete rootProject.buildDir}

第二步,需要在应用级 Gradle 文件上应用 SQLDelight 插件来支持代码生成。 SQLDelight 不会基于 kapt 这样的注释处理器来生成代码。

生成特定平台的代码的过程之所以有效,是因为最终执行的都是 SQL 查询,在某种程度上,这与 Room 数据库等平台特定库是相似的。看看下面的代码:

plugins { id ‘com.android.application’ id ‘kotlin-android’ id ‘com.squareup.sqldelight’}

上面的操作已经集成了通用的 SQLDelight 支持,现在需要添加 Android 支持库 —— AndroidSqliteDriver ,在依赖项节点应用程序级 Gradle 文件下添加以下代码:

implementation “com.squareup.sqldelight:android-driver:1.3.0”

编写 SQL 代码

写 SQL 代码来创建数据库,首先应该定位 *.sq 文件。在 main 目录下创建一个名为 sqldelight 的单独目录(类似于 Java 和 Kotlin 代码的文件夹),并将所有的 *.sq 文件存放其中。

src/main/sqldelight

紧接着,创建 MovieItem.sql 文件,然后把下面的代码添加到该文件中:

CREATE TABLE moveItem ( name TEXT NOT NULL UNIQUE PRIMARY KEY, image TEXT NOT NULL, rating INTEGER NOT NULL DEFAULT 0);selectAll:SELECT *FROM moveItemORDER BY name;insertOrReplace:INSERT OR REPLACE INTO moveItem ( name, image, rating)VALUES (?, ?, ?);selectByName:SELECT *FROM moveItemWHERE name = ?;empty:DELETE FROM moveItem;

添加了上述代码后,将会弹出提示安装 SQLDelight Android Studio 插件。这不是强制性的,但它可以让你更容易理解 SQL 语法。我建议安装该插件。

Android 代码

如上文所述,我们需要用 AndroidSqliteDriver 把数据写进 Android 数据库,该数据库在应用程序启动期间持续存在。首先,创建 AndroidSqliteDriver 实例:

val androidSqlDriver = AndroidSqliteDriver( schema = Database.Schema, context = applicationContext, name = “movies.db”)

接着,需要获取在 MovieItem.sql 文件中创建的查询语句。代码如下:

val queries = Database(androidSqlDriver).movieItemQueries

然后,直接执行 MovieItem.sql 文件中的 selectAll 函数,代码如下:

val movies: List = queries.selectAll().executeAsList()Log.d(“MovieDatabase”, “Movies : $movies”)

协程支持

Room 库成功背后的主要原因之一是它易于使用,而且与 coroutines 和 paging 等流行框架相兼容。

SQLDelight 也有这个好处;我们只需要在应用程序级别的 Gradle 文件的 dependencies 节点下添加以下这行代码就可以了:

implementation “com.squareup.sqldelight:coroutines-extensions-jvm:1.5.0”

现在就像在 Room 库中使用协程一样简单。代码如下:

val players: Flow = queries.selectAll() .asFlow() .mapToList()

如果你仍在使用 RxJava,那么你可以添加下面这行代码,以便将 RxJava 支持集成到 SQLDelight 中:

implementation “com.squareup.sqldelight:rxjava3-extensions:1.5.0”

现在来观察这个查询,我们可以使用 RxJava 扩展构件,如下所示:

val players: Flow = queries.selectAll() .asObservable() .mapToList()

这就是目前的全部内容,希望你能有所收获。

作者:披着狼皮的羊_链接:https://juejin.cn/post/7111246458895990792

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年6月21日 21:03
下一篇 2022年6月21日 21:03

相关推荐

  • ios手游模拟器(手游模拟器ios)

    本文主要讲的是ios手游模拟器,以及和手游模拟器ios相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 哪个iOS模拟器能多开手游账号?可以推荐个好用的模拟器给我吗…

    2022年11月27日
  • 京东快递跨省几天能到(京东一般多久到货)

    由于觉得京东平台的物流效劳十分的不错,而且商品的质量都比拟有保证。在京东平台购物的话,普通多久时间会到货?下面的内容停止引见。 京东普通多久到货? 详细要看发货地址和你所在的地址的…

    2022年11月26日
  • 游戏平台有哪些(游戏平台有哪些)

    简要回答 游戏平台指的是多人通过互联网在线游戏的平台,例如qq游戏,联众世界,浩方电竞平台,VS竞技游戏平台等,只要你下载平台,下载相关游戏,就能实现对战,摆脱了局域网的限制。 详…

    2022年11月25日
  • 淘宝直播库存哪里拿货(淘宝哪里看库存)

    近年俩直播带货越来越火爆,抖音、淘宝、拼多多等平台都有直播带货功能,其中淘宝直播时主流带货平台,一些小伙伴也纷纷加入,但是作为新手不知道淘宝直播库存哪里拿货?下面小编为大家带来淘宝…

    2022年11月25日
  • 淘宝直播没有货源怎么解决(淘宝直播没有货源怎么办)

    淘宝是很多人喜欢的购物【平台,里面的活跃用户很多,流量很大,所以不少商家在上面开店,为了提高销量也会开通直播带货,也有一些主播没有货源,那么淘宝直播没有货源怎么解决?下面小编为大家…

    2022年11月25日
  • 抖音带货怎么做入门(抖音带货怎么做入门教学)

    相信很多小伙伴都有注意到,现在抖音已经成为大家最常光顾的一个平台了,作为一个日活破亿的流量池,如今抖音上的用户数量极大。因此,现在在抖音上带货、卖货的人也是越来越多了,那么想在抖音…

    2022年11月25日
  • 4308米!“探索二号”科考船携深海浮游式作业平台完成海试

    近日,我国“探索二号”科考船携深海浮游式移动作业平台与中继器,赴南海开展海上试验。该平台完成了1500米级、2500米级、4500米级三个由浅到深级别的海试验证,最大工作深度达到4…

    2022年11月25日
  • 手机上怎么买世界杯彩票(手机上怎么买世界杯输赢)

    现在手机已经成为大家生活中非常重要的工具之一,只要一部手机就可以解决衣食住行,最近世界杯火热进行,一些小伙伴想要买彩票,那么,手机上可以买世界杯彩票吗?世界杯买球软件是真的吗?手机…

    2022年11月25日
  • 博客营销的3大优势解析(博客营销怎么做)

    不知不觉已经写了24篇文章,加上这篇是第25篇了,都是自己这几年来用过的营销方法,如果遇到有些不懂的,我会咨询我的朋友和同事帮忙,尽量让每一篇有价值,哪怕是对大家有一点点帮助也行,…

    2022年11月25日
  • 闲鱼上卖货怎么快速赚钱(闲鱼卖货怎么快速卖出)

    闲鱼这个平台由于主要是做二手交易的,因此入驻门槛要比其他电商平台低很多,而且流量也比较大。所以现在选择在闲鱼上卖货的人也是比较多的,只要你选择好卖的产品,一般人都是可以在闲鱼这个平…

    2022年11月24日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息