记录一次SQL排序问题
2021-03-09 本文已影响0人
桃先森_
背景:接口返回2000条左右排序好的id,Android按接口返回的进行查询并展示;
正文:
数据库管理工具用的GreenDao,因为android对sql查询参数长度有限制,所以将返回集进行分割,每个不超过1000,这是第一个坑
一开始用 INSTR ,发现还是有乱序后来用FROM子查询解决
直接上菜
关键sql:
select * FROM (select 'a'||id orderstr, * from table) WHERE id in(109,108,113,134)
ORDER BY INSTR ('a108,a109,a113,a134,orderstr)
使用FROM后的子查询,在加上在id前拼接“a”,防止乱序
GreenDao怎么使用呢?
Cursor cursor = session.getDatabase().rawQuery(sql, null);
拿到cursor对象进行do while进行循环拿值
/**
* @param cursor 根据游标cursor获取所有集合
* @return
*/
private List<Bean> loadAllFromCursor(Cursor cursor) {
List<Bean> queryList = new ArrayList<>(cursor.getCount());
if (cursor.moveToFirst()) {
do {
queryList.add(parse(cursor));
} while (cursor.moveToNext());
}
return queryList;
}
/**
* @param cursor 根据游标转换对象
* @return
*/
private Bean parse(Cursor cursor) {
return new Bean(getCursorDate(cursor, "name"));
}
/**
* 获取游标内某一列值
*
* @param cursor
* @param columnName
* @return
*/
private String getCursorDate(Cursor cursor, String columnName) {
return cursor.getString(cursor.getColumnIndex(columnName));
}
结束