【问题标题】:Ionic Sqlite SELECT IN statement doesn't return correct results离子 Sqlite SELECT IN 语句不返回正确的结果
【发布时间】:2019-09-21 11:00:22
【问题描述】:

我有使用 Sqlite 插件的 ionic 移动应用程序。我尝试运行以下查询:

this.db.executeSql('SELECT * FROM foo_table WHERE id IN (?)', [[1, 3]])
    .then(data => {
        console.log(data.rows.item(0));
        console.log(data.rows.item(1));
        // Do something here
    });

我故意留下显示数据库初始化代码,因为它是不必要的,因为它可以与同一文件中的其他方法一起正常工作。在数据库中,我在 table_foo 中有两个实体,其中包含一些特定的数据,每个实体都有 id。

当我运行上述语句时,它不会返回 id 为 1 和 3 的这两个实体。而是返回undefined。我在 sqlite 控制台中运行完全相同的语句 SELECT * FROM table_a WHERE id IN (1,3); 并且这有效。它正确显示了这两个实体。我的问题是为什么上面的 Sqlite SELECT IN 查询不能正常工作以及我应该如何在 params 中正确添加许多值(值 1 和 3 的数组位于哪里)?我使用它(SELECT IN 查询)错了吗?

当我使用参数运行上述查询时:

  • [1] -> 工作
  • [[1]] -> 工作
  • [[1, 3]] -> 不起作用
  • [1, 3] -> 很明显的错误

【问题讨论】:

  • 您需要类似SELECT ... id IN (?,?) 的内容并绑定[1,3] 的值。
  • 这是一个糟糕的解决方案,因为我可以有一个包含 7 个元素的数组,或者有时它可以包含 20 个元素。考虑到这一点,我无法执行您的建议。
  • 这是唯一的解决方案。如果在运行时之前不知道要绑定多少个值,则可以构建一个带有适当数量问号的查询字符串。

标签: sqlite ionic-framework ionic4


【解决方案1】:

我找到了两种解决方法:

  1. 将数组值连接为字符串(不是很好的解决方案):
const ids = [1, 3];
this.db.executeSql('SELECT * FROM foo_table WHERE id IN (' + ids.toString()')', [])
    .then(data => {
        console.log(data.rows.item(0));
        console.log(data.rows.item(1));
        // Do something here
    });
  1. SELECT IN 查询中使用 sql SELECT如果您可以从数据库表中获取这些值,这是一个很好的解决方案):
this.db.executeSql('SELECT * FROM foo_table_a WHERE id IN (SELECT id FROM foo_table_b)', [])
    .then(data => {
        console.log(data.rows.item(0));
        console.log(data.rows.item(1));
        // Do something here
    });

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2021-01-19
    • 2020-06-23
    • 2012-05-09
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多