【问题标题】:Search value from json in sqlite - Android从sqlite中的json搜索值 - Android
【发布时间】:2020-12-02 06:12:31
【问题描述】:

我有一个名为 User 的表,其中包含名为 userDetails 的列。 userDetails 列具有 json 格式的数据,如下所示。

{
    "id": "77",
    "uid": "247",
    "email": "abc@xyz.com",
}

如何查询此 json 对象中存在的“where uid = 247”。

【问题讨论】:

  • 首先你必须将你的 json 文件存储到你的数据库(房间)中,你可以查询来做到这一点,现在如果你这样做,告诉我给你发送一个查询可以做到!跨度>

标签: java android sqlite android-sqlite android-room


【解决方案1】:

如果userDetails列是有效的JSON字符串,可以使用函数json_extract()

select * 
from user
where json_extract(userDetails, '$.uid') = '247' 

如果你不能使用 SQLite 的 JSON1 扩展,你可以把userDetails 当作一个普通的字符串,使用运算符LIKE

select * 
from user
where ',' || replace(replace(replace(userDetails, '{', ''), '}', ''), ' ', '') || ',' like '%,"uid":"' || '247' ||'",%'

? 占位符替换为您搜索的ID,例如'247'

查看简化的demo

【讨论】:

  • 适用于 DB 浏览器..但是当我在 android 中使用它时,出现此错误: 引起:android.database.sqlite.SQLiteException:没有这样的功能:json_extract(代码 1 SQLITE_ERROR):,编译时。
  • @PoyyamozhiRamakrishnan 查看我编辑的答案。
  • 虽然这似乎可以解决,但我想知道为什么我不能在 android 中使用 JSON1 扩展以及如何使用它?
  • 如您所读:sqlite.org/json1.htmljson1 扩展是一个可加载的扩展...,所以它似乎不包含在 Android 中使用的 SQLite 中。也许您可以使用 3d 派对库来做到这一点。我发现了这个:github.com/requery/sqlite-android
  • 感谢您的宝贵时间.. @forpas.. 3rd 方库工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多