2014-05-03 9 views

risposta

14

è necessario utilizzare una query prima per esempio come questo:

private static final String SQL_DISTINCT_ENAME = "SELECT DISTINCT "+EmpDao.Properties.EName.columnName+" FROM "+EmpDao.TABLENAME; 

public static List<String> listEName(DaoSession session) { 
    ArrayList<String> result = new ArrayList<String>(); 
    Cursor c = session.getDatabase().rawQuery(SQL_DISTINCT_ENAME, null); 
    try{ 
     if (c.moveToFirst()) { 
      do { 
       result.add(c.getString(0)); 
      } while (c.moveToNext()); 
     } 
    } finally { 
     c.close(); 
    } 
    return result; 
} 

Naturalmente si può aggiungere un po 'di filtro-criteri per la query pure.

La stringa statica SQL_DISTINCT_ENAME viene utilizzata per le prestazioni, in modo che la stringa di query non debba essere creata ogni volta.

EmpDao.Properties e EmpDao.TABLENAME viene utilizzato per avere sempre i nomi delle colonne e i nomi delle tabelle esatti come vengono generati da greendao.

+0

Ottimo, funziona! – Ananth

+0

@oli ha modificato questa risposta e ha notato che questo codice deve essere sincronizzato perché 'Cursore' non è protetto da thread. Ma poiché 'Cursor c' è definito all'interno del metodo e non viene fornito al mondo esterno, questo metodo è thread-safe poiché ogni thread avrà il suo' Cursore'. Si prega di non reedit l'argomento di sincronizzazione, ma lasciare un commento. Post scriptum IMHO la modifica non ha seguito [le regole] (http://stackoverflow.com/help/privileges/edit) e non avrebbe dovuto essere accettata, soprattutto dal momento che questa risposta è accettata! – AlexS

Problemi correlati