美文网首页
记录一次SQL排序问题

记录一次SQL排序问题

作者: 桃先森_ | 来源:发表于2021-03-09 15:28 被阅读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));
        }
    
    

    结束

    相关文章

      网友评论

          本文标题:记录一次SQL排序问题

          本文链接:https://www.haomeiwen.com/subject/stcbqltx.html