2010-07-16 122 views
2

这让我很困惑!我试图从我的数据库中的列中返回最大值,但返回值始终是列的名称。SELECT MAX(列)只返回列名

查询我使用:

private static final String SELECTMAX = "SELECT MAX(?) FROM " + TABLE_NAME ; 

的(测试)函数返回的最大值:

public int getMaxValue(String field){ 

    int r = 0; 
    String f[] = new String[] {field}; 
    Cursor c = this.db.rawQuery(SELECTMAX, f); 
    if (c.moveToFirst()) { 
     String s = c.getString(0); 
     Log.i("XXXXX","Max num: " + s); 
    } 
    return r; 
} 

我是查询列是一个整数类型,但结果“S”始终是列名称而不是所需的值。

谢谢

回答

4

我没有太多的sqllite经验,是吗?准备好的统计数据的参数?如果是这样,它看起来像选择列名称的字符串表示的最大值,则不应将列名称作为参数传递。

所以你的查询应该看起来像。

SELECT MAX(s) FROM " + TABLE_NAME;

您得到有效执行

SELECT MAX('s') FROM " + TABLE_NAME;

+0

业,这就是它!谢谢 – Brett 2010-07-16 10:41:44

+0

+1这几乎是肯定的。如果你想符合克里斯的答案,你可以改变代码,以便f是其他任意字符串,例如“克里斯是对的” – emory 2010-07-16 10:46:12

+0

不,这是绝对的。为什么我要将f更改为任意字符串? – Brett 2010-07-16 11:05:34

1

你应该利用DatabaseUtils .stringForQuery()静态方法已在Android SDK中轻松地检索值的,这个例子是for String bot还有方法Long

stringForQuery(SQLiteDatabase db, String query, String[] selectionArgs) 

用于在db上运行查询的实用程序方法,并返回第一行第一列中的值。

喜欢的东西

String myString=DatabaseUtils.stringForQuery(getDB(),query,selectionArgs); 
+0

谢谢,还没有遇到过那样的课。看起来它可以帮助很多:) – Brett 2010-07-16 11:16:13