2011-08-23 61 views

回答

64

ORMLite现在支持next()previous()moveRelative(offset),...在CloseableIterator class方法。这应该允许您随意移动底层的Cursor对象。

它还支持以下DAO游标的方法:


当你与ORMLite建立自己的查询,您可以使用QueryBuilder对象。 queryBuilder.prepare()返回由DAO中的各种方法使用的PreparedQuery。您可以拨打dao.iterator(preparedQuery),这将返回一个CloseableIterator,用于遍历结果。有一个iterator.getRawResults()可以访问DatabaseResults类。在Android下,可将其转换为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(); 
} 

这是一个有点复杂,但具有淡水河谷背后同行去这个对象是由数据库抽象类隐藏你绝对

+1

我如何获得databaseConnection? – max4ever

+0

我已经更改了这个答案,以显示如何在不需要数据库连接的情况下完成此任务。 – Gray

+0

@Gray什么是使用光标来扩大list_item视图的最佳方式?另外,'CursorAdapter'是与OrmLiteBaseListActivity一起使用的最好的东西吗? – theblang

0

如果您的意思是getHelper()方法来达到道创建等方法,你只需要从OrmLiteBaseActivity<YourDBHelper>继承,你可以调用它。它看起来某事像这样:

public class YourClass extends OrmLiteBaseActivity<YourDBHelper> { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    ... 
    getHelper().getDao().queryForAll(); 
    ... 
    } 
} 

如果你指的是光标来处理数据库操作:我不认为你可以实现这个目标!但我不明白你为什么需要它。 ORMLite几乎具有游标的所有功能。那么你需要什么?

+4

我知道这个,但我需要让Cursor在CursorAdapter中使用它。 – sealskej

0

您是否尝试过一些来自this的灰色建议?他解释了如何选择一个列作为另一个名称,例如select id为_id。

+0

既然你可以在ormlite中命名你的列,我猜为什么不只是将它们命名为_id,而不是做select作为:)? – AgentKnopf

+0

当然,你可以,但在重命名它们不是一个选项的情况下,你只需使用“as”的sql语法;) –

+0

确实,你有一个点:) – AgentKnopf

0

如果您在一个活动中,并且不想乱用QueryBuilder,请给出以下结果,这同样有效。

Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder)