ORMLite选择不同的字段

时间:2012-08-30 06:05:48

标签: android sqlite ormlite

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

示例

书籍表

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

我想从这个列表中提取一位作者(“Johnny Himself”),并希望我能用ORMLite而不是用Java手动完成。

2 个答案:

答案 0 :(得分:19)

  

我想选择一组不同的数据,并将它们用作实际对象。

我不是100%确定我在此理解您的查询,但ORMLite支持QueryBuilderdistinct() method应该做您想要的事情。所以你的代码看起来像是:

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

答案 1 :(得分: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>();
}