我想问问这个怎么查询。我想检查编辑文本中的名称,如果名称存在,作为记录的一部分,在数据库中我想用这个对象的数据填充所有编辑文本。我也有非常奇怪的错误。请帮助或给我一个如何开始的建议。我是初学者。感谢所有的答案和线索。
这是我的代码:
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)?
最佳答案
java.lang.IllegalArgumentException: Prepared query is not of type SELECT_LONG, did you call QueryBuilder.setCountOf(true)?
所以异常试图告诉你出了什么问题。当您构建一个查询时,ORMLite 不知道该查询将用于什么。因为您可以选择各种列等或使用聚合函数(如 MAX(...)
),所以它会记录一个内部查询类型,然后在执行查询时检查它。
如果你想使用 Dao.countOf(...)
那么你需要在你的 QueryBuilder
对象上添加 setCountOf(true)
. 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();
关于java - 准备好的查询的奇怪错误不是 SELECT_LONG 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22183886/