Android游标与ORMLite在CursorAdapter中使用
有什么办法,如何获得一个查询,我用ORMLite道物体处理光标?
ORMLite现在支持CloseableIterator类的 next()
, previous()
, moveRelative(offset)
,…方法。 这应该允许你Cursor
移动底层的Cursor
对象。
它还支持以下DAO游标方法:
-
dao.mapSelectStarRow(databaseResults)
从查询的数据库结果中返回最新的行来select *
。 有了这个,你可以改变光标的位置(例如),然后获取当前对象。 -
dao.getSelectStarRowMapper()
提供一个映射器,您可以使用该映射器映射Dao外部的对象。
在使用ORMLite构build自己的查询时,可以使用QueryBuilder
对象。 queryBuilder.prepare()
返回一个由DAO中的各种方法使用的PreparedQuery
。 您可以调用dao.iterator(preparedQuery)
,它将返回一个用于遍历结果的CloseableIterator
。 有一个iterator.getRawResults()
来访问DatabaseResults
类。 在Android下,可以将其转换为AndroidDatabaseResults
,该AndroidDatabaseResults
上有一个getCursor()
方法来返回Android Cursor
。
像下面的代码:
// 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(); }
这有点复杂,但是你肯定不得不背后隐藏数据库抽象类的对象。
你从这个post中试了一些格雷的build议吗? 他解释了如何select一个列作为另一个名称,例如,selectid为_id。
如果你在一个Activity中,并且不想乱搞QueryBuilder,那么给出如下的结果,这同样有效。
Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder)
如果你的意思是getHelper()
方法到达dao方法创build等,你只需要从OrmLiteBaseActivity<YourDBHelper>
inheritance,你可以调用它。 它会看起来像这样:
public class YourClass extends OrmLiteBaseActivity<YourDBHelper> { @Override protected void onCreate(Bundle savedInstanceState) { ... getHelper().getDao().queryForAll(); ... } }
如果你的意思是光标来处理数据库操作:我不认为你可以达到它! 但我不明白为什么你需要它。 ORMLite几乎具有游标的所有function。 那么你需要什么?