1.介绍
本篇主要是基于androidx的room库介绍进阶的sql写法。
基础的room库的使用可以参考本篇文章:Android Jetpack 之 room库 (zinyan.com)
在这里主要介绍如何丰富的使用@Query
自定义查询方法。实现指定字段的查询排序。
实现跨表连接字段查询等。最后介绍一下AndroidStudio的 Database Inspector 功能。让我们可以在开发的时候直接调试和检测数据库的结果。
2. 定义SQLite实现跨表查询
如果要创建数据库表,很简单通过@Entity
定义就可以了。
但是如果两个表中,有字段相同。然后进行查询除了繁琐的定义外键方法有没有更简单的?直接进行查询呢?
有,我们可以使用 LEFT OUTER JOIN
(左连接查询)
结合示例进行介绍:
有表一如下:
表二如下:
假如表二的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比较老了。建议升级)
当我们启动设备调试后,可以通过选择不同的app。看到该app下的全部数据库。
例如多个数据库的
5.1 Enter query 写sql语句进行查询表
我们除了可以看到数据库中的数据以外,还可以自己写sql语句进行查询。直接通过Android Studio 查询app的数据
例如我搜索的结果:
5.2 开启Live updates 实时更新
我们如果调试的数据库数据,会不断变化刷新。那么可以在操作面板中开启Live updates 。这样当表数据发生变化的时候,我们的面板中的数据也会实时变化。
如果不想开启的话,可以点击左侧的刷新按钮,进行刷新数据。
5.3 实时修改本地数据库数据
我们如果想修改数据库中的表数据,我们可以直接通过enter query 面板通过sql语句进行修改。
同时我们可以在查询的结果中,通过双击某个字段,直接进行数据的修改。
修改完毕后,我们app中查询的数据立马就会发生变化了。
总的来说,database inspector就是一个专门的sqlite数据库管理工具。Android 帮我们实现了数据库的链接和通讯。
我们可以直接在studio中进行数据库的操作。
评论区