6

我有一个 SQLite 表(在 Android 上),它有很多字段,但某些字段是重复/非规范化的。我想选择一组不同的数据并将它们用作实际对象。

例子

书桌

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

我想从这个列表中提取一位作者(“Johnny Himself”),并希望我应该能够使用 ORMLite 而不是手动使用 Java 来做到这一点。

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 回答