我有一个具有众多领域一个SQLite表(在Android),但某些字段重复/非规范化。 我想选择一组不同的这些数据,并利用它们为实际的对象。
例
书表
title summary author
Little Johnny A funny kid Johnny Himself
Big Johnny A funny adult Johnny Himself
我想从这个列表(“约翰尼自己”)中提取一个作者和期望,我应该能够手动ORMLite要做到这一点,而不是使用Java。
我想选择一组不同的这些数据,并利用它们为实际的对象。
我敢肯定不是100%我明白您的查询在这里,但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];
...
}
这是我的应用程序代码
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>();
}