Странная ошибка с подготовленным запросом не относится к типу SELECT_LONG
Я хочу спросить, как я могу сделать запросы для этого. Я хочу проверить имя из текста редактирования и, если имя существует, как часть записи, в db, я хочу заполнить все тексты редактирования данными из этого объекта. Также у меня очень странная ошибка. Пожалуйста, помогите или дайте мне совет, как начать с него. Я начинающий. Спасибо за все ответы и подсказки.
Вот мой код:
if(et_nazwa!=null){
long value = 0;
try {
PreparedQuery<Klient> query = klientDao.queryBuilder()
.where().eq("Kli_nazwa",et_nazwa.getText().toString()).prepare();
value = klientDao.countOf(query);
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(value!=0){
PreparedQuery<Klient> q_adres = klientDao.queryBuilder().selectColumns("Kli_adres").where().eq("Kli_nazwa",et_nazwa.getText().toString()).prepare();
PreparedQuery<Klient> q_nip = klientDao.queryBuilder().selectColumns("Kli_nip").where().eq("Kli_nazwa",et_nazwa.getText().toString()).prepare();
et_adres.setText(q_adres.toString());
et_nip.setText(q_nip.toString());
}
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
И у меня есть такая странная ошибка, как:
java.lang.IllegalArgumentException: Prepared query is not of type SELECT_LONG, did you call QueryBuilder.setCountOf(true)?
1 ответ
java.lang.IllegalArgumentException: подготовленный запрос не относится к типу SELECT_LONG, вы вызывали QueryBuilder.setCountOf(true)?
Таким образом, исключение пытается сказать вам, что пошло не так. Когда вы создаете запрос, ORMLite не знает, для чего этот запрос будет использоваться. Потому что вы можете выбрать различные столбцы и тому подобное или использовать агрегатные функции (например, MAX(...)
) он записывает внутренний тип запроса и затем проверяет его при выполнении запроса.
Если вы хотите использовать Dao.countOf(...)
тогда вам нужно добавить setCountOf(true)
на ваше QueryBuilder
объект. Документы для Dao.countOf(...)
следует сделать более явным этот факт.
PreparedQuery<Klient> query = klientDao.queryBuilder().setCountOf(true)
.where().eq("Kli_nazwa",et_nazwa.getText().toString()).prepare();
Если вы используете queryBuilder.countOf()
или же where.countOf()
тогда он установит внутренний счетчик флагов. Вы можете получить количество запросов без этой проблемы, выполнив:
value = klientDao.queryBuilder()
.where().eq("Kli_nazwa",et_nazwa.getText().toString()).countOf();
Кстати, это странная картина:
et_adres.setText(((PreparedQuery)q_adres).toString());
Может быть, вы хотели сделать следующее?
String queryString = klientDao.queryBuilder()...prepareStatementString();