Android 使用ormlite获取带有原始sql的游标

Android 使用ormlite获取带有原始sql的游标,android,ormlite,Android,Ormlite,我想使用带旋转器的SimpleCorsorAdapter 我找到了如何返回游标 QueryBuilder<ChoixPointVerification, Integer> qb = choixPointVerificationDao.queryBuilder(); qb.where().eq(FIELD, id); PreparedQuery<ChoixPointVerification> preparedQuery = qb.prepare(); AndroidComp

我想使用带旋转器的SimpleCorsorAdapter

我找到了如何返回游标

QueryBuilder<ChoixPointVerification, Integer> qb = choixPointVerificationDao.queryBuilder();
qb.where().eq(FIELD, id);
PreparedQuery<ChoixPointVerification> preparedQuery = qb.prepare();
AndroidCompiledStatement compiledStatement =
                (AndroidCompiledStatement)preparedQuery.compile(db, StatementType.SELECT);

Cursor cursor = compiledStatement.getCursor();
return cursor;
QueryBuilder qb=choixPointVerificationDao.QueryBuilder();
qb.where().eq(字段,id);
PreparedQuery PreparedQuery=qb.prepare();
AndroidCompiledStatement compiledStatement=
(AndroidCompiledStatement)preparedQuery.compile(db,StatementType.SELECT);
Cursor Cursor=compiledStatement.getCursor();
返回光标;
但是微调器需要一个_id字段,我只有一个具有id字段的对象。我宁愿避免对字段进行重命名

我怎样才能解决那个案子?我真的需要将一个id与所有微调器字段相关联

我想象我可以从一个rawsql发出一个游标,但我找不到如何使用ormlite。如果我可以使用原始sql创建PreparedQuery,这似乎是可能的

我还读到,如果我有一个AndroidDatabase对象,我可以发出一个游标对象,但是我们如何用ormlite创建AndroidDatabase呢

我对所有的解决方案都持开放态度


关于

我刚刚找到了一个似乎高效、简单且符合ormlite的解决方案

我只需要使用
getHelper().getReadableDatabase()
获得一个
AndroidDatabase

然后使用

Cursor cursor = db.query("choixpointverification",
    new String[] { "id", "id as _id", "nom" },
    "masque = 0 and idPointVerification = " + idPointVerification.toString(),
    null, null, null, "tri");

您可以通过使用
QueryBuilder
从中获取基础
游标
对象,而不必求助于原始查询。看看这个答案:

您可以执行类似以下代码的操作:

// build your query
QueryBuilder<Foo, String> qb = fooDao.queryBuilder();
qb.where()...;
// when you are done, prepare your query and build an iterator
CloseableIterator<Foo> iterator = dao.iterator(qb.prepare());
try {
   // get the raw results which can be cast under Android
   AndroidDatabaseResults results =
       (AndroidDatabaseResults)iterator.getRawResults();
   Cursor cursor = results.getRawCursor();
   ...
} finally {
   iterator.closeQuietly();
}
//生成查询
QueryBuilder qb=fooDao.QueryBuilder();
qb.where()。。。;
//完成后,准备查询并构建迭代器
CloseableIterator迭代器=dao.iterator(qb.prepare());
试一试{
//获取可以在Android下播放的原始结果
AndroidDatabaseResults结果=
(AndroidDatabaseResults)迭代器。getRawResults();
Cursor=results.getRawCursor();
...
}最后{
迭代器;
}

当我将此代码用于
SimpleCursorAdapter
时,由于调用
iterator.closequilly()
,我得到了一个
StaleDataException
。现在我只是注释了这一行,但我担心这会造成内存泄漏。