2010-07-16 167 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