C'è un modo, come ottenere Cursore per una query, che sto elaborando con oggetto Dao ORMLite?Cursore Android con ORMLite da utilizzare in CursorAdapter
risposta
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 aselect *
. 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.
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?
So di questo, ma ho bisogno di ottenere Cursor per usarlo in CursorAdapter. – sealskej
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.
Dal momento che è possibile assegnare un nome alle colonne in ormlite, immagino perché non basta denominarle _id, anziché eseguire la selezione come :)? – AgentKnopf
Certo, è possibile, ma in un'istanza in cui la loro rinomina non è un'opzione, si utilizza semplicemente la sintassi sql di "come";) –
vero che, hai ottenuto un punto :) – AgentKnopf
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)
come posso ottenere il databaseConnection? – max4ever
Ho modificato questa risposta per mostrare come può essere eseguita senza la connessione al database. – Gray
@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