我在Android上的Sqlite数据库中存储了一个Integer作为字符串,但现在我需要找到数据的最大值。我有以下代码:
public String getMaxPageFromMainDB(){
String maxNoStr =null;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT MAX(donebottombar) FROM customers",null);
if(cursor.moveToFirst()) {
maxNoStr = cursor.getString(0);
cursor.moveToNext();
}
cursor.close();
return maxNoStr;
}
在对存储的数字的最大值进行排序时,9将在11之前出现。
我的代码是否有任何问题,或者在不更改数据库架构的情况下更好地对其进行排序?
如下所述,代码稍有变化:
Cursor cursor = db.rawQuery("SELECT MAX(CAST(donebottombar AS INTEGER)) FROM customers",null);
答案 0 :(得分:0)
你正在尝试对字符串进行整数计算。
当MAX与字符串一起使用时,“MAX”字符串就是表格顶部的字符串。
引自“http://www.java2s.com/Tutorial/Oracle/0240__Aggregate-Functions/UseMAXwithstrings.htm”:
当你使用MAX()和字符串时,字符串按字母顺序排序,“maximum”字符串位于列表的底部,“minimum”字符串位于列表的顶部。
您需要将该值保存为数据库中的整数,而不是字符串。
答案 1 :(得分:0)
如果存储的数据类型与您要比较值的方式不同,则必须convert:
SELECT MAX(CAST(donebottombar AS INT )) FROM customers;
SELECT MAX(CAST(donebottombar AS TEXT)) FROM customers;