Android ormlite like()函数不起作用
问题描述:
我是新手,请帮助我。Android ormlite like()函数不起作用
我想使用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);
}
感谢。
答
很简单,你问它是完全字符串“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
答
一个古老的问题,但我刚刚解决了一些问题(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);
}
答
上述罐的回答解决类似问题的查询,但有SQL注入风险。如果'filterKey'的值为'',则会导致SQLException,因为SQL将是SELECT * FROM XXX WHERE xxx
LIKE'%'%'。你可以使用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
帮助了我。谢谢:) – Shirane85
请务必添加撇号来工作:qb.where()。like(“madeCompany”,“'%”+ filterKey +“%'”); –
@Justin:感谢代码片段。其实我想要一个类似这样的查询,“如果我输入B,那么它应该首先显示B的字符串,然后是包含B的字符串(虽然它以A开头)”。这是一种方式吗? –