2011-08-23 45 views

Respuesta

64

ORMLite ahora soporta next(), previous(), moveRelative(offset) ..., métodos en el CloseableIterator class. Esto debería permitirle mover el objeto subyacente Cursor a voluntad.

También es compatible con los siguientes métodos DAO cursor:

  • dao.mapSelectStarRow(databaseResults) Volver la última fila de la base de datos los resultados de una consulta a select *. Con esto puede cambiar la ubicación del cursor (por ejemplo) y luego obtener el objeto actual.
  • dao.getSelectStarRowMapper() Proporciona un correlacionador que puede usar para asignar el objeto fuera del Dao.

Cuando usted está construyendo su propia consulta con ORMLite, se utiliza el objeto QueryBuilder. queryBuilder.prepare() devuelve un PreparedQuery que es usado por varios métodos en el DAO. Puede llamar al dao.iterator(preparedQuery), que devolverá un CloseableIterator que se utiliza para recorrer los resultados. Hay un iterator.getRawResults() para obtener acceso a la clase DatabaseResults. En Android, esto se puede convertir a AndroidDatabaseResults que tiene un método getCursor() para devolver el Android Cursor.

Algo así como el código siguiente:

// 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(); 
} 

Esto es un poco complicado, pero que son sin duda tener que mirar detrás del valle para llegar a este objeto que está oculto por las clases de abstracción de base de datos.

+1

¿cómo puedo obtener la conexión de base de datos? – max4ever

+0

He cambiado esta respuesta para mostrar cómo se puede hacer sin necesidad de conexión a la base de datos. – Gray

+0

@Gray ¿Cuál es la mejor manera de inflar las vistas de list_item con el cursor? Además, ¿es un 'CursorAdapter' lo mejor para usar con' OrmLiteBaseListActivity'? – theblang

0

Si se refiere al método getHelper() para llegar a los métodos de dao crear etc., solo tiene que heredar del OrmLiteBaseActivity<YourDBHelper> y puede llamarlo. Se verá algo como esto:

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

Si quiere decir el cursor para manejar la operación de base de datos: No creo que se puede llegar a ella! Pero no entiendo por qué deberías necesitarlo. ORMLite tiene casi todas las funciones del cursor. Entonces, ¿para qué lo necesitas?

+4

Sé de esto, pero necesito que Cursor lo use en CursorAdapter. – sealskej

0

¿Has probado algunos de los consejos de Gray de this post? Explica cómo puede seleccionar una columna como otro nombre, como, por ejemplo, seleccionar id como _id.

+0

Como puede nombrar sus columnas en ormlite, supongo que por qué no solo las nombra _id, en lugar de seleccionarlas como :)? – AgentKnopf

+0

Claro, puede, pero en una instancia en la que cambiarle el nombre no es una opción, simplemente usa la sintaxis sql de "como";) –

+0

cierto eso, tiene un punto :) – AgentKnopf

0

Si estás en una actividad y no quieres perder el tiempo con el QueryBuilder da el siguiente intento, que es igual de efectivo.

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