2014-05-03 13 views

Trả lời

14

Bạn phải sử dụng một truy vấn liệu ví dụ như thế này:

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

Tất nhiên bạn có thể thêm một số bộ lọc tiêu chuẩn để truy vấn là tốt.

Chuỗi tĩnh SQL_DISTINCT_ENAME được sử dụng để thực hiện, do đó chuỗi truy vấn không phải được tạo mỗi lần.

EmpDao.PropertiesEmpDao.TABLENAME được sử dụng để luôn có chính xác tên cột và tên bảng khi chúng được tạo bởi greendao.

+0

Tuyệt vời, nó hoạt động! – Ananth

+0

@oli đã chỉnh sửa câu trả lời này và lưu ý rằng mã này cần được đồng bộ hóa vì 'Con trỏ' không phải là luồng an toàn. Nhưng vì 'Cursor c' được định nghĩa bên trong phương thức và không được trao cho thế giới bên ngoài, nên phương thức này là luồng an toàn vì mọi luồng sẽ có' Con trỏ 'riêng của nó. Vui lòng không chỉnh sửa chủ đề đồng bộ hóa, nhưng thay vào đó hãy để lại nhận xét. P.S. IMHO bản chỉnh sửa không tuân thủ [các quy tắc] (http://stackoverflow.com/help/privileges/edit) và không nên được chấp nhận, đặc biệt là kể từ khi câu trả lời này được chấp nhận! – AlexS

Các vấn đề liên quan