10

我是新手,请帮助我。

我正在尝试使用 ormlite like(column name,value) 函数,但这对我不起作用。但是当我测试全文时,它就像“eq”函数一样工作。

我的代码是,

try {
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder();
    qb.where().like("madeCompany", filterKey);
    PreparedQuery<MakeDTO> pq = qb.prepare();
    return makeDao.query(pq);
} catch (SQLException e) {
    throw new AppException(e);
}

谢谢。

4

3 回答 3

32

一个老问题,但我刚刚解决了一些问题(ORMLite 的文档不是那么清楚)。您需要将查询参数包装在“%”中,以便告诉 ORMLite 查询字符串的哪一侧可以匹配任意数量的字符。

例如,如果您希望您的查询匹配任何包含您的字符串的 madeCompany,请使用以下命令:

try {
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder();
    qb.where().like("madeCompany", "%"+filterKey+"%");
    PreparedQuery<MakeDTO> pq = qb.prepare();
    return makeDao.query(pq);
} catch (SQLException e) {
    throw new AppException(e);
}
于 2013-06-26T01:14:13.460 回答
11

很简单,你要求它完全是字符串'madeCompany',如果你想做部分匹配,你需要使用 % 通配符等。

public Where<T,ID> like(java.lang.String columnName,
                        java.lang.Object value)
                 throws java.sql.SQLException
Add a LIKE clause so the column must mach the value using '%' patterns.
Throws:
java.sql.SQLException

where.like(java.lang.String, java.lang.Object)

于 2011-10-04T02:33:03.153 回答
1

以上答案可以解决like查询问题,但存在SQL注入风险。如果'filterKey'的值为',会导致SQLException,因为SQL会是SELECT * FROM XXX WHERE xxxLIKE '%'%'。您可以使用 SelectArg 来避免,例如这种情况:

try {
    String keyword = "%"+filterKey+"%";
    SelectArg selectArg = new SelectArg();
    QueryBuilder<MakeDTO, Integer> qb = makeDao.queryBuilder();
    qb.where().like("madeCompany", selectArg);
    PreparedQuery<MakeDTO> pq = qb.prepare();
    selectArg.setValue(keyword);
    return makeDao.query(pq);
} catch (SQLException e) {
    throw new AppException(e);
}

参考: http: //ormlite.com/javadoc/ormlite-core/doc-files/ormlite_3.html#index-select-arguments

于 2018-02-09T06:55:26.873 回答