uni-app 不能同时使用两个数据库操作符吗?

发布于 1周前 作者 vueper 来自 Uni-App

uni-app 不能同时使用两个数据库操作符吗?

示例代码:

以下代码运行报错: JQL语法暂不支持使用更新操作符

await db.collection('class')  
    .where({  
        _id: db.command.in(incList) // 查询所有ID对应的课件详情  
    }).update({  
        used:db.command.inc(1)  
    });

以下代码执行没问题

await db.collection('class')  
    .where({  
        _id: db.command.in(incList) // 查询所有ID对应的课件详情  
    }).update({  
        used:1  
    });

操作步骤:

每次模拟运行小程序都会报错

预期结果:

语句顺利执行,给一组数据的used值增加1。

实际结果:

报错,并提示JQL语法暂不支持使用更新操作符

bug描述:

在传统方式操作数据库时,where语句使用db.command.in查找一组记录,update语句使用db.command.inc为这组记录的某个字段增1,结果执行时报错:JQL语法暂不支持使用更新操作符。其实没使用JQL语法而是传统的方式,update语句使用db.command.inc改为直接给字段赋值就没报错了,但是不能满足需要,请问怎么回事?是不是BUG?


4 回复

你在前端操作的把?前端操作都是JQL,需要在云函数中操作数据库


是的,这是什么奇怪的规定

回复 systhinker: 前端操作用的就是JQL, JQL暂不支持使用更新操作符

uni-app 中,确实可以同时使用多个数据库操作符来进行复杂的数据查询。uni-app 提供了基于 SQLite 的数据库 API,可以通过 uni.db 对象来操作数据库。尽管它的查询语法可能不如 SQL 那样丰富,但你可以通过组合多个操作符来实现复杂的查询需求。

以下是一个示例,展示如何在 uni-app 中同时使用两个数据库操作符进行查询。假设我们有一个名为 users 的表,其中包含 agename 两个字段,我们想要查询年龄大于 25 且名字包含 “John” 的用户。

首先,确保你的数据库中已经有一个 users 表,并插入一些测试数据:

// 初始化数据库表和数据
uni.db.open({
    success: function () {
        uni.db.createTable({
            sql: 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)',
            success: function () {
                uni.db.exec({
                    sql: 'INSERT INTO users (name, age) VALUES ("John Doe", 30), ("Jane Smith", 22), ("Johnny Appleseed", 28)',
                    success: function () {
                        console.log('Table and data initialized.');
                    }
                });
            }
        });
    }
});

接下来,我们编写一个查询,该查询将同时使用两个操作符:>LIKE

// 查询年龄大于25且名字包含"John"的用户
uni.db.select({
    table: 'users',
    where: 'age > ? AND name LIKE ?',
    values: [25, '%John%'],
    success: function (res) {
        console.log('Query result:', res.result.rows);
        // 处理查询结果
        res.result.rows.forEach(function (row) {
            console.log('ID:', row.id, 'Name:', row.name, 'Age:', row.age);
        });
    },
    fail: function (err) {
        console.error('Query failed:', err);
    }
});

在这个示例中,where 子句使用了 AND 逻辑操作符来组合两个条件:age > ?name LIKE ?values 数组提供了这些条件的参数值,分别是 25'%John%'

通过这种方式,你可以在 uni-app 中同时使用多个数据库操作符来执行复杂的查询。请确保你的查询语法和操作符的使用符合 SQLite 的规范,以便获得正确的查询结果。

回到顶部