6

多数のフィールドを持つSQLiteテーブル(Android上)がありますが、特定のフィールドが繰り返される/非正規化されています。このデータの個別のセットを選択して、実際のオブジェクトとして使用したいと思います。

本のテーブル

title            summary        author
Little Johnny    A funny kid    Johnny Himself
Big Johnny       A funny adult  Johnny Himself

このリストから1人の著者( "Johnny Himself")を抽出したいと思います。これは、Javaを使用して手動で行うのではなく、ORMLiteを使用して行うことができるはずです。

4

2 に答える 2

23

このデータの個別のセットを選択し、それらを実際のオブジェクトとして使用したいと考えています。

ORMLiteは、必要な処理を行うdistinct()メソッドをサポートしてQueryBuilderいます。したがって、コードは次のようになります。

List<Book> results = booksDao.queryBuilder()
    .distinct().selectColumns("author").query();

この場合、結果のBookオブジェクトにはauthorフィールド セットのみが含まれ、フィールドなどは含まれませidん。オブジェクトではなく作者名だけが必要な場合は、次のようにします。

GenericRawResults<String[]> rawResults =
    booksDao.queryRaw("SELECT DISTINCT author FROM books");
for (String[] resultColumns : rawResults) {
    String author = resultColumns[0];
    ...
}
于 2012-08-30T12:41:37.807 に答える
0

これは私のアプリケーションコードです

public class DbHelper<T> {
    private Class<T> c;
    private DatabaseHelper db;
    public DbHelper(Class<T> c) {
        this.c = c;
        db = DatabaseHelper.getInstance();
    }

これは良い考えです

public List<T> queryForBuilderDistinct(int offset, int limit, String ColumnsName,
       String orderName, boolean isAsc) {
    try {
        Dao<T, Integer> dao = db.getDao(c);
        QueryBuilder<T, Integer> queryBuilder = dao.queryBuilder();
        if (offset != 0) {
            queryBuilder.offset((long) offset);
        }
        if (limit != 0) {
            queryBuilder.limit((long) limit);
        }
        if (orderName != null) {
            queryBuilder.orderBy(orderName, isAsc);
        }
        queryBuilder.distinct().selectColumns(ColumnsName);
        return dao.query(queryBuilder.prepare());
    } catch (SQLException e) {
        LogUtil.e(TAG, "queryForBuilderDistinct", e);
    }
    return new ArrayList<T>();
}
于 2015-02-07T11:14:54.187 に答える