记录一次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));
    }

结束

上一篇下一篇

猜你喜欢

热点阅读