【问题标题】:SELECT MAX(column) returning only column nameSELECT MAX(column) 仅返回列名
【发布时间】:2011-03-16 21:12:26
【问题描述】:

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

我使用的查询:

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

我正在查询的列是 INTEGER 类型,但结果“s”始终是列名,而不是所需的值。

谢谢

【问题讨论】:

    标签: java android sqlite


    【解决方案1】:

    我在 sqllite 方面没有太多经验,是吗?准备好的语句的参数?如果是这样,看起来您正在选择列名的字符串表示形式的最大值,则不应将列名作为参数传递。

    所以你的查询应该是这样的。

    SELECT MAX(s) FROM " + TABLE_NAME;

    你正在有效地执行

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

    【讨论】:

    • +1 这几乎可以肯定。如果您想符合克里斯的回答,您可以更改代码,以便 f 是其他任意字符串,例如“克里斯是对的”
    • 不,绝对是这个。为什么我要把 f 改成任意字符串?
    • 如果你确定是对的,就不用改成任意字符串了。
    【解决方案2】:

    您应该使用Android SDK中已经存在的DatabaseUtils.stringForQuery()静态方法来轻松检索值,此示例适用于String bot,还有Long的方法

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

    在数据库上运行查询并返回第一行第一列中的值的实用方法。

    类似

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

    【讨论】:

    • 谢谢,还没有遇到过这门课。看起来它可以帮助很多:)
    猜你喜欢
    • 1970-01-01
    • 2020-01-19
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多