我是新手,请帮助我。
我正在尝试使用ormlite(列名,值)函数,但这对我不起作用。但是当我测试全文时,它就像“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);
}
感谢。
答案 0 :(得分:31)
一个老问题,但我刚刚解决了一些问题(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);
}
答案 1 :(得分: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
答案 2 :(得分:1)
上面的答案可以解决类似的查询问题,但有SQL注入风险。如果&#39; filterKey&#39;的值是&#39;,它将导致SQLException,因为SQL将是SELECT * FROM XXX WHERE xxx
LIKE&#39;%&#39;%&#39;。您可以使用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