json1 扩展与 Room db

问题描述 投票:0回答:1

我正在开发一个 Android 应用程序并使用 Room db 来存储和获取数据,我需要从多个表中获取一些数据,其中结果列之一必须包含 kv 列表的列表 通过以下查询在带有 mysql 的 php 服务器上实现了相同的要求

SELECT 
    t1.* ,
    JSON_MERGE_PATCH(
        JSON_OBJECTAGG(
            IFNULL(stu.id, '-1'), 
            IFNULL(stu.color, -1)
        ),
        JSON_OBJECTAGG(
            IFNULL(CASE t5.toOrder WHEN 1 THEN 5 WHEN 0 THEN 6 ELSE -1 END, '-1'), 
            IFNULL((SELECT color FROM `Table4` WHERE id = CASE t5.toOrder WHEN 1 THEN 5 WHEN 0 THEN 6 ELSE -1 END), -1)
        )
    )
    AS status 
    FROM ((((Table1 AS t1
    LEFT JOIN `Table2` AS t2 ON t2.itemId = t1.id) 
    LEFT JOIN `Table3` AS t3  ON t3.id = t2.orderId)
    LEFT JOIN `Table4` AS stu ON t3.statusId = stu.id)
    LEFT JOIN `Table5` AS t5 ON t1.id = t5.itemId)
    GROUP BY t1.id ORDER BY t1.`name`

工作得很好,我可以像这样以 json 形式获取该列

{ “1”:-2659, “5”:-749647, “-1”:-1 }

现在我正在尝试在 Room db sqlite 中实现相同的查询,但没有运气

这是我尝试过的 (在桌面数据库浏览器上工作正常,但在 Room db 上不行)

SELECT
    t1.*,
    json_patch(
        json_group_object(
            CAST(IFNULL(t4.id, '-1') as TEXT), 
            IFNULL(t4.color, -1)
        ),
        json_group_object(
            CAST(IFNULL(CASE t5.toOrder WHEN 1 THEN 5 WHEN 0 THEN 6 ELSE -1 END, '-1') as TEXT), 
            IFNULL((SELECT color FROM `Status` WHERE id = CASE t5.toOrder WHEN 1 THEN 5 WHEN 0 THEN 6 ELSE -1 END), -1)
        )
    )
    AS status
    FROM Tble1 AS t1
    LEFT JOIN `Table2` AS t2 ON t2.itemId = t1.id
    LEFT JOIN `Table3` AS t3 ON t3.id = t2.orderId
    LEFT JOIN `Table4` AS t4 ON t3.statusId = t4.id
    LEFT JOIN `Table5` AS t5 ON t1.id = t5.itemId
    GROUP BY t1.id ORDER BY t1.`name`

我知道 json1 扩展,但即使使用 requery 库后,状态字段仍然为空 有人可以帮忙吗

android mysql sqlite android-room sqlite-json1
1个回答
0
投票

除非您使用的是 Android 版本 34 或更高版本,否则 JSON 函数不包含在 SQLite 版本中。

按照:-

SQLite 版本 3.38.0 (2022-02-22) 起,JSON 函数和运算符默认内置于 SQLite 中。可以通过添加 -DSQLITE_OMIT_JSON 编译时选项来省略它们。在版本 3.38.0 之前,JSON 函数是一个扩展,只有在包含 -DSQLITE_ENABLE_JSON1 编译时选项时才会包含在构建中。换句话说,JSON 函数从在 SQLite 版本 3.37.2 及更早版本中选择加入变为在 SQLite 版本 3.38.0 及更高版本中选择退出。

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.