2014-05-03 5 views

Antwort

14

Sie haben eine rohe Abfrage zum Beispiel wie folgt zu verwenden:

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; 
} 

Natürlich können Sie auch einige Filter-Kriterien für die Abfrage hinzufügen.

Die statische Zeichenfolge SQL_DISTINCT_ENAME wird für die Leistung verwendet, sodass die Abfragezeichenfolge nicht jedes Mal neu erstellt werden muss.

EmpDao.Properties und EmpDao.TABLENAME wird verwendet, um immer die genauen Spaltennamen und Tabellennamen zu haben, wie sie von greundao generiert werden.

+0

Großartig, es funktioniert! – Ananth

+0

@oli hat diese Antwort bearbeitet und festgestellt, dass dieser Code synchronisiert werden muss, da 'Cursor' nicht threadsicher ist. Aber da 'Cursor c' innerhalb der Methode definiert ist und nicht an die Außenwelt weitergegeben wird, ist diese Methode threadsicher, da jeder Thread seinen eigenen' Cursor' hat. Bitte schreiben Sie das Synchronisationsthema nicht neu, sondern hinterlassen Sie einen Kommentar. P.S. IMHO der Edit nicht [die Regeln] (http://stackoverflow.com/help/privileges/edit) und sollte nicht akzeptiert worden sein, vor allem, da diese Antwort akzeptiert wird! – AlexS