Функция Android ormlite like () не работает - PullRequest
9 голосов
/ 04 октября 2011

Я новичок в этом, пожалуйста, помогите мне.

Я пытаюсь использовать функцию, похожую на 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 ]

31 голосов
/ 26 июня 2013

Старый вопрос, но кое-что я только что решил (документация 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);
}
11 голосов
/ 04 октября 2011

Довольно просто, вы просите, чтобы это была именно строка '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)

1 голос
/ 09 февраля 2018

Ответы выше могут решить подобную проблему запроса, но есть риск внедрения 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

...