准备查询的奇怪错误不是SELECT_LONG类型

时间:2014-03-04 21:52:19

标签: java android ormlite

我想问一下如何才能对此进行查询。我想从编辑文本中检查名称,如果名称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)?

1 个答案:

答案 0 :(得分:2)

  

java.lang.IllegalArgumentException:准备好的查询不是SELECT_LONG类型,你调用了QueryBuilder.setCountOf(true)吗?

所以异常是试图告诉你出了什么问题。构建查询时,ORMLite不知道查询将用于什么。因为您可以选择各种列等或使用聚合函数(如MAX(...)),它会记录内部查询类型,然后在执行查询时对其进行检查。

如果您想使用Dao.countOf(...),则需要在setCountOf(true)对象上添加QueryBuilderDao.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();