【问题标题】:Filtering JSON with System.Data.SQLite and json_each()使用 System.Data.SQLite 和 json_each() 过滤 JSON
【发布时间】:2018-02-07 23:54:18
【问题描述】:

SQLite 数据库包含一个带有 JSON 数据的列,如下所示:

MyTable
______________________________________
| specs         | name   | date
--------------------------------------
| ["foo","bar"] | Test01 | 2018-02-05
| ["foo","bar"] | Test02 | 2018-02-01
| ["foo"]       | Test03 | 2018-02-03

伪代码:

private static SQLiteConnection _sqliteDb;

using (var source = new SQLiteConnection($"Data Source={databasePath};Version=3;"))
{
    source.Open();

    _sqliteDb = new SQLiteConnection("Data Source=:memory:");
    _sqliteDb.Open();

    // copy db file to memory
    source.BackupDatabase(_sqliteDb, "main", "main", -1, null, 0);
    source.Close();
}

var cmd = new SQLiteCommand(query, _sqliteDb);

为了过滤此列,查询如下所示:

var query = "SELECT * FROM MyTable, json_each(MyTable.specs) AS spec WHERE spec.value = 'bar'"

出现此错误:SQLite error (1): no such table: json_each

如何使用带有System.Data.SQLite.Core的json1扩展?

【问题讨论】:

  • 您是否按照说明操作here
  • 是的,我的查询类似于 4.13.1 中的查询。使用 json_each() 的示例
  • specs是表名还是列名? (查询中缺少另一个。)
  • 是列名。我编辑了我的帖子。

标签: c# sqlite


【解决方案1】:

未加载 SQLite 扩展。

紧接着:

_sqliteDb.Open();

我必须调用以下命令才能使json1 工作:

_sqliteDb.EnableExtensions(true);
_sqliteDb.LoadExtension("SQLite.Interop.dll", "sqlite3_json_init");

另请注意,函数是按连接注册的。

【讨论】:

  • LoadExtension 未能找到该 dll。可能是什么问题?
猜你喜欢
  • 2015-06-13
  • 2013-12-11
  • 2017-04-25
  • 2015-06-19
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多