整数存储为String返回错误MAX值Sqlite Android

时间:2017-04-19 20:38:20

标签: android sqlite cursor

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

2 个答案:

答案 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;