侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 290 篇文章
  • 累计创建 57 个标签
  • 累计收到 98 条评论

Android room 的扩展SQL写法,进行连接查询。以及DataBase Inspector的使用

Z同学
2022-04-13 / 0 评论 / 1 点赞 / 839 阅读 / 1,885 字
温馨提示:
本文最后更新于 2022-04-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.介绍

本篇主要是基于androidx的room库介绍进阶的sql写法。

基础的room库的使用可以参考本篇文章:Android Jetpack 之 room库 (zinyan.com)

在这里主要介绍如何丰富的使用@Query 自定义查询方法。实现指定字段的查询排序。

实现跨表连接字段查询等。最后介绍一下AndroidStudio的 Database Inspector 功能。让我们可以在开发的时候直接调试和检测数据库的结果。

2. 定义SQLite实现跨表查询

如果要创建数据库表,很简单通过@Entity定义就可以了。

但是如果两个表中,有字段相同。然后进行查询除了繁琐的定义外键方法有没有更简单的?直接进行查询呢?

有,我们可以使用 LEFT OUTER JOIN (左连接查询)

结合示例进行介绍:

有表一如下:

image-20220413162111580

表二如下:

image-20220413162149180

假如表二的id 是表一的productId值。而我们查询表一的结果时需要获取表二的favorite值。

@Query("SELECT table1.*,table2.favorite FROM table1 LEFT OUTER JOIN table2 ON  table2.id = table1.productId WHERE  table1.cropId = :cropid")
    LiveData<List<DeviceItem>> getDevicesList(String cropid);

例如上面就是实现了链接查询。

唯一需要注意的就是在返回的DeviceItem类中,需要有favorite的属性,否则无法接收查询结果。

3. room中的like 关键字,实现模糊匹配查询。

我们如果需要进行like的模糊查询该如何使用?方法很简单

    @Query("SELECT * FROM table1  WHERE  name like '%' ||:deviceName ||'%'")
    LiveData<List<DeviceItem>> getDevicesList(String deviceName);

需要通过'%'|| 添加适配逻辑,例如上面的写法就会在关键字的前面和后面添加上%通配符。

就可以实现模糊匹配查询了。方便快捷。

4. 排序查询

我们在获取room数据库中的结果,如果需要针对某个字段进行排序和sqlite语句一样,通过order by

进行排序就可以实现正序和倒叙了。

示例:通过表中的time字段,进行倒叙查询。时间最大的显示在第一项。

   @Query("SELECT * FROM device WHERE project_id = :id ORDER BY time desc")
    LiveData<List<Device>> getDevicesById(String id);

desc 是倒叙。asc是正序。默认情况下我们省略asc。

整个语法和sqlite是一样的。大家了解和弄明白sqlite语法后就可以快捷的使用。

5. DataBase Inspector

原先使用sqlite数据库时。没有办法实时针对数据库进行查询。调试数据繁琐。而现在Android Studio中支持了数据库实时调试。

我们app安装并启动后,我们可以通过Android Studio实时看到app中的sqlite数据库,以及数据库中的表和数据。

(如果没有该功能,那么代表我们的Android Studio比较老了。建议升级)

image-20220413163951138

当我们启动设备调试后,可以通过选择不同的app。看到该app下的全部数据库。

例如多个数据库的

image-20220413164116277

5.1 Enter query 写sql语句进行查询表

我们除了可以看到数据库中的数据以外,还可以自己写sql语句进行查询。直接通过Android Studio 查询app的数据

image-20220413164514641

例如我搜索的结果:

image-20220413164556127

5.2 开启Live updates 实时更新

我们如果调试的数据库数据,会不断变化刷新。那么可以在操作面板中开启Live updates 。这样当表数据发生变化的时候,我们的面板中的数据也会实时变化。

image-20220413164810278

如果不想开启的话,可以点击左侧的刷新按钮,进行刷新数据。

5.3 实时修改本地数据库数据

我们如果想修改数据库中的表数据,我们可以直接通过enter query 面板通过sql语句进行修改。

同时我们可以在查询的结果中,通过双击某个字段,直接进行数据的修改。

image-20220413165014490

修改完毕后,我们app中查询的数据立马就会发生变化了。

总的来说,database inspector就是一个专门的sqlite数据库管理工具。Android 帮我们实现了数据库的链接和通讯。

我们可以直接在studio中进行数据库的操作。

1

评论区