Android ormlite like()函数不起作用

时间:2011-10-04 00:32:18

标签: android ormlite

我是新手,请帮助我。

我正在尝试使用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);
}

感谢。

3 个答案:

答案 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
  

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

答案 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