Получить курсор с сырым sql с ormlite - PullRequest
2 голосов
/ 01 января 2012

Я бы хотел использовать SimpleCursorAdapter со Spinner.

Я нашел, как вернуть курсор.

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;

Но Spinner требует поле _id, и у меня будет только объект с полем id. Я предпочитаю избегать переименования поля.

Как я могу разрешить это дело? Мне действительно нужно связать идентификатор со всем полем счетчика.

Я предполагал, что, возможно, смогу выдать курсор из rawsql, но я не знаю, как с ormlite. Кажется возможным, если я смогу создать PreparedQuery с необработанным sql.

Я также читал, что если у меня есть объект AndroidDatabase, я могу выдать объект Cursor, но как мы можем создать AndroidDatabase с ormlite?

Я действительно открыт со всем решением

Привет

Ответы [ 2 ]

8 голосов
/ 15 сентября 2012

Вы можете получить базовый объект Cursor из ORMLite , используя QueryBuilder, не прибегая к необработанному запросу. Посмотрите на этот ответ:

Курсор Android с ORMLite для использования в CursorAdapter

Вы можете сделать что-то вроде следующего кода:

// 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();
}
4 голосов
/ 01 января 2012

Что ж, я только что нашел решение, которое кажется эффективным, простым и совместимым с ormlite.

Мне просто нужно получить AndroidDatabase с getHelper().getReadableDatabase().

, а затемиспользуйте

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