Hello stackoverflow:D
我正在构建一个带有listview的android应用程序,需要进行某种排序,因为它可以重新洗牌。所以我的数据库中有一个排序列,用于保存数据库中每个值的位置。现在,每当我在列表中创建一个新元素时,我希望它的排序值为maximum+1
,因此它将位于列表的末尾。问题是,我不知道如何编写将返回一个值的原始查询,并检查它以确保检索到一个值(数据库可能为空)。
到目前为止我的努力:
Cursor sortcursor = ourDatabase.rawQuery("SELECT MAX(" + KEY_SORT + ") FROM " + TABLE_CASTING + " WHERE " + KEY_USER + "='" + username + "';", null);
int maxSort = sortcursor.getInt(sortcursor.getColumnIndex(KEY_SORT));
maxSort++;
cv.put(KEY_SORT, maxSort);
感谢您的帮助:)
答案 0 :(得分:2)
在您的情况下,游标只有一列,因此您应该使用sortcursor.getInt(0)
而不是sortcursor.getInt(sortcursor.getColumnIndex(KEY_SORT))
。请尝试以下代码:
Cursor cursor = ourDatabase.rawQuery("SELECT MAX(" + KEY_SORT + ") FROM " + TABLE_CASTING + " WHERE " + KEY_USER + "='" + username + "';", null);
int maxSort = 0;
if (cursor != null) {
try {
if (cursor.moveToFirst() && !cursor.isNull(0)) {
maxSort = cursor.getInt(0) + 1;
}
} finally {
cursor.close();
}
}
cv.put(KEY_SORT, maxSort);
答案 1 :(得分:1)
以下内容可行,但请注意它是用MYSQL而不是sqllite编写的,但我假设它们具有相同的功能。我已经完成了将下一个订单值插入表中,如果表为空则返回1,如果不是则将值递增1。第二个子查询返回顺序,但我发现将它与插入结合起来很方便。
INSERT INTO table_name (order_column_name)
VALUES (
(SELECT CASE WHEN MAX(tn.order_column_name) IS NULL THEN 1
ELSE MAX(tn.order_column_name)+1 END
AS order_column_name FROM table_name tn
ORDER BY tn.order_column_name DESC LIMIT 1)
);