RdbPredicates 深度解析:复杂查询构建

【RdbPredicates 深度解析:复杂查询构建】

RdbPredicates 是 HarmonyOS 中用于构建数据库查询条件的核心类,支持复杂的查询逻辑。通过组合多个条件,可以实现灵活的数据筛选。

1. 基本查询条件

使用 equalTonotEqualTo 等方法设置字段的比较条件:

RdbPredicates predicates = new RdbPredicates("user");
predicates.equalTo("age", 25);
  • equalTo(field, value):字段等于指定值。
  • notEqualTo(field, value):字段不等于指定值。
  • greaterThan(field, value):字段大于指定值。
  • lessThan(field, value):字段小于指定值。

2. 多条件组合

使用 andor 方法组合多个条件:

RdbPredicates predicates = new RdbPredicates("user");
predicates.and(
    predicates.equalTo("age", 25),
    predicates.greaterThan("salary", 5000)
);

3. 范围查询

使用 inbetween 实现范围匹配:

// in 查询
predicates.in("status", Arrays.asList("active", "pending"));

// between 查询
predicates.between("score", 60, 100);

4. 模糊查询

使用 like 进行模糊匹配:

predicates.like("name", "%John%");

5. 复杂嵌套查询

支持多层嵌套条件,例如:

RdbPredicates outerPredicates = new RdbPredicates("user");

RdbPredicates innerPredicates = new RdbPredicates("user");
innerPredicates.and(
    innerPredicates.equalTo("age", 25),
    innerPredicates.like("name", "%John%")
);

outerPredicates.or(
    innerPredicates,
    outerPredicates.equalTo("role", "admin")
);

6. 使用示例

完整示例代码如下:

RdbPredicates predicates = new RdbPredicates("user");
predicates.and(
    predicates.equalTo("status", "active"),
    predicates.or(
        predicates.greaterThan("age", 18),
        predicates.like("name", "%test%")
    )
);

7. 链接参考

HarmonyOS
2026-06-02 10:16:17
浏览
1
收藏 0
回答 1
已解决
回答 1
按赞同
/
按时间
CRM幻影舞

【RdbPredicates 是 relationalStore 的查询条件构建器,支持链式调用。

import { relationalStore } from '@kit.ArkData'

// 复合条件查询

function buildComplexQuery(): relationalStore.RdbPredicates {
  return new relationalStore.RdbPredicates('task')
    .equalTo('status', 'active')          // status = 'active'
    .and()
    .greaterThan('priority', 2)           // AND priority > 2
    .and()
    .beginWrap()
      .like('title', '%重要%')            // AND (title LIKE '%重要%'
      .or()
      .like('description', '%紧急%')      //  OR description LIKE '%紧急%')
    .endWrap()
    .orderByDesc('created_at')            // ORDER BY created_at DESC
    .limitAs(20)                          // LIMIT 20
    .offsetAs(0)                          // OFFSET 0
}

// 使用

async function queryTasks(store: relationalStore.RdbStore): Promise<relationalStore.ResultSet> {
  return store.query(buildComplexQuery(), ['id', 'title', 'status', 'priority'])
}

// 遍历结果集

function processResultSet(rs: relationalStore.ResultSet): object[] {
  const results: object[] = []
  while (rs.goToNextRow()) {
    results.push({
      id: rs.getLong(rs.getColumnIndex('id')),
      title: rs.getString(rs.getColumnIndex('title')),
      status: rs.getString(rs.getColumnIndex('status')),
      priority: rs.getLong(rs.getColumnIndex('priority'))
    })
  }
  rs.close()
  return results
}
```】
分享
微博
QQ
微信
回复
2026-06-02 12:42:35
相关问题
RdbPredicates能否支持查询 count 功能?
1792浏览 • 1回复 待解决
RdbPredicates无法被声明
1103浏览 • 1回复 待解决
RdbPredicates 支持多条件拼接吗?
94浏览 • 1回复 待解决