存储为字符串的整数返回错误的最大值 Sqlite Android

Integer stored as String returning wrong MAX value Sqlite Android

我在 Android 上的 Sqlite 数据库中存储了一个整数作为字符串,但现在我需要找到数据的最大值。我有以下代码:

    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);

您正在尝试对字符串进行整数计算。

将 MAX 与字符串一起使用时,"MAX" 字符串是 table 顶部的字符串。

引自“http://www.java2s.com/Tutorial/Oracle/0240__Aggregate-Functions/UseMAXwithstrings.htm”:
当您对字符串使用 MAX() 时,字符串按字母顺序排列,"maximum" 字符串位于列表底部,"minimum" 字符串位于列表顶部。

您需要将该值作为整数而不是字符串保存在数据库中。

当存储的数据类型与您想要比较值的方式不同时,您必须convert它们:

SELECT MAX(CAST(donebottombar AS INT )) FROM customers;
SELECT MAX(CAST(donebottombar AS TEXT)) FROM customers;