离子Sqlite SELECT IN语句未返回正确的结果

时间:2019-09-21 11:00:22

标签: sqlite ionic-framework ionic4

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

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]->错误很明显

1 个答案:

答案 0 :(得分:0)

我发现了两种解决方法:

  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查询中使用sql SELECT IN(如果您可以从数据库表中获取这些值,则是一个很好的解决方案):
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
    });