如何从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);
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
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);
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