Java Ormlite查询生成器条件

Java Ormlite查询生成器条件,java,sql,orm,ormlite,Java,Sql,Orm,Ormlite,我有一个用户表单,用户指定研究标准,我必须应用它们,使用ormlite从数据库中获取正确的数据: boolean set = false; QueryBuilder<Client, Integer> builder = clientsDao.queryBuilder(); Where<Client, Integer> builderWhere = builder.where(); if (!tfSearchName.getText().eq

我有一个用户表单,用户指定研究标准,我必须应用它们,使用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()));
boolean set=false;
QueryBuilder builder=clientsDao.QueryBuilder();
其中builderWhere=builder.Where();
如果(!tfSearchName.getText().equals(“”){
builderWhere.like(“name”,tfSearchName.getText().trim());
builderWhere.and();
设置=真;
}
如果(!tfSearchBalanceMin.getText()等于(“”){
builderWhere.gt(“balance”,tfSearchBalanceMin);
builderWhere.and();
设置=真;
}
如果(!tfSearchBalanceMax.getText()等于(“”){
lt(“余额”,tfSearchBalanceMax);
设置=真;
}
clientTable.setItems(FXCollections.observableArrayList(
set?clientsDao.query(builderWhere.prepare())
:clientsDao.queryForAll());
查询生成器的问题是,最后总是有一个
子句,因此总是抛出一个expection

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


PS:抱歉英语不好

您可以尝试使用
公共Where和(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()));
int和子句=0;//应与“and”操作关联的子句数
QueryBuilder builder=clientsDao.QueryBuilder();
其中builderWhere=builder.Where();
如果(!TextUtils.isEmpty(tfSearchName.getText())){
builderWhere.like(“name”,tfSearchName.getText().trim());
AND子句++;
}
如果(!TextUtils.isEmpty(tfSearchBalanceMin.getText())){
builderWhere.gt(“balance”,tfSearchBalanceMin);
AND子句++;
}
如果(!TextUtils.isEmpty(tfSearchBalanceMax.getText())){
lt(“余额”,tfSearchBalanceMax);
AND子句++;
}
clientTable.setItems(FXCollections.observableArrayList(
AndClaires>0?clientsDao.query(builderWhere.and(AndClaires.prepare())
:clientsDao.queryForAll());