如何从Sqlite数据库中以相反的顺序从Sqlite中获取数据

how to get data from Sqlite in revrese Order from Sqlite databse

public ArrayList<Chat> fetchChatHistory(String senderId, String receiverId) {
        ArrayList<Chat> chatList = new ArrayList<Chat>();
        String where = "" + DataProviderConstants.MESSAGE_RECEIVER_ID_COLUMN
                + " in (?,?) AND "
                + DataProviderConstants.MESSAGE_SENDER_ID_COLUMN + " in (?,?) "
        /*
         * +"("+DataProviderConstants.MESSAGE_RECEIVER_ID_COLUMN+"=? AND "
         * +DataProviderConstants.MESSAGE_SENDER_ID_COLUMN+"=?)"
         */;
        Cursor cursor = mContext.getContentResolver().query(
                DataProviderConstants.MESSAGE_TABLE_CONTENTURI, null, where,
                new String[] { senderId, receiverId, senderId, receiverId },
                DataProviderConstants.MESSAGE_ID_COLUMN);
        if (cursor != null && cursor.moveToFirst()) {
            do {
                Chat chat = new Chat();
                chat.setRecieverID(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MESSAGE_RECEIVER_ID_COLUMN)));
                chat.setSenderID(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MESSAGE_SENDER_ID_COLUMN)));
                chat.setMessage(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MSG_COLUMN)));
                chat.setLat(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MESSAGE_LAT_COLUMN)));
                chat.setLon(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MESSAGE_LON_COLUMN)));
                int isunread = cursor.getInt(cursor
                        .getColumnIndex(DataProviderConstants.MSG_IS_UNREAD));
                chat.setIsUnread((isunread == 0 ? false : true));
                chat.setDelvired(true);
                chatList.add(chat);
            } while (cursor.moveToNext());
        }
        return chatList;
    }

使用此代码可以从 Sq-lite 数据库中正向获取数据,而我想以相反的顺序获取数据我正在使用 Collections.reverse 但这里给出错误我不知道如何获取数据android 中 Sq-lite 的逆序缺少一些东西请建议我或帮助我。

在您的 query 方法中,最后一个参数是 "orderby"。变化

 Cursor cursor = mContext.getContentResolver().query(
                DataProviderConstants.MESSAGE_TABLE_CONTENTURI, null, where,
                new String[] { senderId, receiverId, senderId, receiverId },
                DataProviderConstants.MESSAGE_ID_COLUMN);

 Cursor cursor = mContext.getContentResolver().query(
                DataProviderConstants.MESSAGE_TABLE_CONTENTURI, null, where,
                new String[] { senderId, receiverId, senderId, receiverId },
                DataProviderConstants.MESSAGE_ID_COLUMN+" DESC");

这将为您提供按 ID 排序的行,但按降序排列。

这样的东西行得通吗?

public ArrayList<Chat> fetchChatHistory(String senderId, String receiverId) {
        ArrayList<Chat> chatList = new ArrayList<Chat>();
        String where = "" + DataProviderConstants.MESSAGE_RECEIVER_ID_COLUMN
                + " in (?,?) AND "
                + DataProviderConstants.MESSAGE_SENDER_ID_COLUMN + " in (?,?) "
        /*
         * +"("+DataProviderConstants.MESSAGE_RECEIVER_ID_COLUMN+"=? AND "
         * +DataProviderConstants.MESSAGE_SENDER_ID_COLUMN+"=?)"
         */;
        Cursor cursor = mContext.getContentResolver().query(
                DataProviderConstants.MESSAGE_TABLE_CONTENTURI, null, where,
                new String[] { senderId, receiverId, senderId, receiverId },
                DataProviderConstants.MESSAGE_ID_COLUMN);
        if (cursor != null && cursor.moveToLast()) {
            do {
                Chat chat = new Chat();
                chat.setRecieverID(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MESSAGE_RECEIVER_ID_COLUMN)));
                chat.setSenderID(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MESSAGE_SENDER_ID_COLUMN)));
                chat.setMessage(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MSG_COLUMN)));
                chat.setLat(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MESSAGE_LAT_COLUMN)));
                chat.setLon(cursor.getString(cursor
                        .getColumnIndex(DataProviderConstants.MESSAGE_LON_COLUMN)));
                int isunread = cursor.getInt(cursor
                        .getColumnIndex(DataProviderConstants.MSG_IS_UNREAD));
                chat.setIsUnread((isunread == 0 ? false : true));
                chat.setDelvired(true);
                chatList.add(chat);
            } while (cursor.moveToPrevious());
        }
        return chatList;
    }

我变了

cursor.moveToFirst()

cursor.moveToLast()

cursor.moveToNext()

cursor.moveToPrevious()

有两种方法
a) 使用答案中定义的 DESC
b) 反转数组chatList。 就在你的行 return chatList;

之前

添加这一行

Collections.reverse(chatList );
return chatList ;

只需使用原始查询。这与其他查询语言类似。

字符串选择查询 = "SELECT * FROM YOUR_TABLE_NAME WHERE ANY_CONDITION ORDER BY COLUMN_NAME DESC;";

游标cursor = db.rawQuery(selectQuery, null);

根据官方Android Documention

getContentResolver().query(
    UserDictionary.Words.CONTENT_URI,   // The content URI of the words table
    mProjection,                        // The columns to return for each row
    mSelectionClause                    // Selection criteria
    mSelectionArgs,                     // Selection criteria
    mSortOrder);        

指定 ORDER BY ID DESC/ASC 时注意 mSorOrder