2011-08-23 10 views

risposta

64

ORMLite ora supporta next(), previous(), moveRelative(offset), ... metodi sul CloseableIterator class. Ciò dovrebbe consentire di spostare l'oggetto sottostante Cursor in base alla volontà.

Supporta inoltre i seguenti metodi DAO cursore:

  • dao.mapSelectStarRow(databaseResults) Ritorna l'ultima riga dai risultati del database da una query a select *. Con questo è possibile modificare la posizione del cursore (ad esempio) e quindi ottenere l'oggetto corrente.
  • dao.getSelectStarRowMapper() Fornisce un mappatore che è possibile utilizzare per mappare l'oggetto al di fuori del Dao.

Quando si crea la propria domanda con ORMLite, si utilizza l'oggetto QueryBuilder. queryBuilder.prepare() restituisce un PreparedQuery che viene utilizzato da vari metodi nel DAO. È possibile chiamare dao.iterator(preparedQuery) che restituirà un CloseableIterator che viene utilizzato per scorrere tra i risultati. C'è un iterator.getRawResults() per accedere alla classe DatabaseResults. Sotto Android, questo può essere lanciato su un AndroidDatabaseResults che ha un metodo getCursor() su di esso per restituire l'Android Cursor.

Qualcosa come il seguente codice:

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

Questo è un po 'complicato, ma si sono sicuramente dover sbirciare dietro la valle per arrivare a questo oggetto che è nascosto dalle classi di astrazione del database.

+1

come posso ottenere il databaseConnection? – max4ever

+0

Ho modificato questa risposta per mostrare come può essere eseguita senza la connessione al database. – Gray

+0

@Gray Qual è il modo migliore per gonfiare le viste list_item usando il cursore? Inoltre, è un 'CursorAdapter' la cosa migliore da usare con' OrmLiteBaseListActivity'? – theblang

0

Se si intende il metodo getHelper() per raggiungere i metodi dao, creare ecc., È necessario ereditare solo dallo OrmLiteBaseActivity<YourDBHelper> ed è possibile chiamarlo. Sembrerà sth come questo:

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

Se vuoi dire il cursore per gestire il funzionamento del database: non credo che si può raggiungere! Ma non capisco perché dovresti averne bisogno. ORMLite ha quasi tutte le funzioni del cursore. Quindi, per cosa ti serve?

+4

So di questo, ma ho bisogno di ottenere Cursor per usarlo in CursorAdapter. – sealskej

0

Hai provato alcuni dei consigli di Gray dal post this? Spiega come è possibile selezionare una colonna come un altro nome, ad esempio selezionare id come _id.

+0

Dal momento che è possibile assegnare un nome alle colonne in ormlite, immagino perché non basta denominarle _id, anziché eseguire la selezione come :)? – AgentKnopf

+0

Certo, è possibile, ma in un'istanza in cui la loro rinomina non è un'opzione, si utilizza semplicemente la sintassi sql di "come";) –

+0

vero che, hai ottenuto un punto :) – AgentKnopf

0

Se sei in un'attività e non vuoi scherzare con il QueryBuilder, dai il via libera, che è altrettanto efficace.

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