2017-04-19 37 views
0

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

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

当存储的数据类型是你要如何比较值的不同,你必须convert他们:

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

谢谢,你把我在正确的轨道上。语法是关键。以下代码适用于我:游标cursor = db.rawQuery(“SELECT MAX(CAST(donebottombar AS INTEGER))FROM customers”,null); – MarkC

0

你试图做一个字符串整数计算。

当在字符串中使用MAX时,“MAX”字符串是表格顶部的字符串。从“http://www.java2s.com/Tutorial/Oracle/0240__Aggregate-Functions/UseMAXwithstrings.htm

报价:
当您使用MAX()的字符串,字符串按字母顺序与‘最大’的字符串是在列表的底部,‘最小值’串处于顶部有序列表。

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

+0

我猜,但我希望有一个修复,而不是我的代码大修。我注意到在Sqlite中有一个CAST作为INT,但是有没有相当于Android Sqlite的? – MarkC

+0

http://stackoverflow.com/questions/41634060/how-to-get-max-value-of-column-type-in​​teger-stored-as-type-text-in-sqlite-table – MarkC