我想问一下如何才能对此进行查询。我想从编辑文本中检查名称,如果名称exsist,作为记录的一部分,在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)?
答案 0 :(得分:2)
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()
,则会在内部设置count-of标志。通过执行以下操作,您可以在没有此问题的情况下获取查询计数:
value = klientDao.queryBuilder()
.where().eq("Kli_nazwa",et_nazwa.getText().toString()).countOf();
不过,这是一个奇怪的模式:
et_adres.setText(((PreparedQuery)q_adres).toString());
也许您想要执行以下操作?
String queryString = klientDao.queryBuilder()...prepareStatementString();