我有一个SQLite表(在Android上),它有很多字段,但某些字段是重复/非规范化的。我想选择一组不同的数据并将它们用作实际对象。
示例
书籍表
title summary author
Little Johnny A funny kid Johnny Himself
Big Johnny A funny adult Johnny Himself
我想从这个列表中提取一位作者(“Johnny Himself”),并希望我能用ORMLite而不是用Java手动完成。
答案 0 :(得分:19)
我想选择一组不同的数据,并将它们用作实际对象。
我不是100%确定我在此理解您的查询,但ORMLite支持QueryBuilder
上distinct()
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>();
}