Ste*_*v_k 12 android ormlite android-cursoradapter
我正在修改我的Android应用程序以使用ORMLite,它目前使用了许多CursorAdapter,我非常希望尽量减少编码.
我不是100%肯定但是看起来当ORMLite在db中创建一个id字段时,它总是使用id,而CursorAdapter需要_id.
可以使用如下查询来解决此问题:
select id as _id ......
Run Code Online (Sandbox Code Playgroud)
但该Dao.queryRaw()方法返回一个列表,而不是Cursor,所以我这样做的方法是打开另一个SQLiteOpenHelper数据库连接并使用rawQuery().
这有效,但有没有更好的方法呢?拥有两个独立的数据库连接似乎有点过头了,以后可能会存在麻烦.
Gra*_*ray 12
您的评论表明您已经回答了问题.您当然可以使用ORMLite创建名为"_id"的列:
@DatabaseField(generatedId = true)
private int _id;
Run Code Online (Sandbox Code Playgroud)
要么
@DatabaseField(generatedId = true, columnName = "_id")
private int id;
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Cursors,那么您可能需要查看该类的last()和moveAbsolute(...)方法DatabaseResults.此外,AndroidDatabaseResults(您可以强制转换)还有一个getRawCursor()方法,它返回底层Cursor对象并具有附加getCount()和getPosition()方法.
以下是有关ORMLite和Cursors的更多信息:
您可以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();
}
Run Code Online (Sandbox Code Playgroud)
事实证明我确实需要一个带有ORMLite的原始SQL查询,因为我需要进行左连接,(即不是因为必须在查询中重命名id列,根据Gray的上述答案,这不是必需的)
我这样做的方式如下:
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
public void myRawQueryMethod() {
SQLiteDatabase database = this.getReadableDatabase();
String SqlQuery = "Write raw SQL query here";
Cursor cursor = database.rawQuery(SqlQuery, null);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议
| 归档时间: |
|
| 查看次数: |
7067 次 |
| 最近记录: |