Ormlite 查询生成器条件

Ormlite Query BuilderCondition

我有一个用户表单,用户指定研究标准,我必须应用它们才能使用 ormlite 从数据库中获取正确的数据:

  boolean set = false;

    QueryBuilder<Client, Integer> builder = clientsDao.queryBuilder();
    Where<Client, Integer> builderWhere = builder.where();

    if (!tfSearchName.getText().equals("")) {
        builderWhere.like("name", tfSearchName.getText().trim());
        builderWhere.and();
        set = true;
    }

    if (!tfSearchBalanceMin.getText().equals("")) {
        builderWhere.gt("balance", tfSearchBalanceMin);
        builderWhere.and();
        set = true;
    }

    if (!tfSearchBalanceMax.getText().equals("")) {
        builderWhere.lt("balance", tfSearchBalanceMax);
        set = true;
    }

    clientTable.setItems(FXCollections.observableArrayList(
            set ? clientsDao.query(builderWhere.prepare())
                    : clientsDao.queryForAll()));

查询构建器的问题是最后总是有一个 and 子句,所以总是会引发预期。

我想知道一种使用条件生成 sql 语句的好方法,就像我在代码中所做的那样。

PS : 抱歉英语不好

您可以尝试使用 public Where<T, ID> and(int numClauses) 例如:

int andClauses= 0; // number of clauses that should be connected with "and" operation

QueryBuilder<Client, Integer> builder = clientsDao.queryBuilder();
Where<Client, Integer> builderWhere = builder.where();

if (!TextUtils.isEmpty(tfSearchName.getText())) {
    builderWhere.like("name", tfSearchName.getText().trim());
    andClauses++;
}

if (!TextUtils.isEmpty(tfSearchBalanceMin.getText())) {
    builderWhere.gt("balance", tfSearchBalanceMin);
    andClauses++;
}

if (!TextUtils.isEmpty(tfSearchBalanceMax.getText())) {
    builderWhere.lt("balance", tfSearchBalanceMax);
    andClauses++;
}

clientTable.setItems(FXCollections.observableArrayList(
            andClauses > 0 ? clientsDao.query(builderWhere.and(andClauses).prepare())
                    : clientsDao.queryForAll()));