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。 那么你需要什么?