我不能在android sqlite中使用MAX函数

时间:2016-07-01 14:22:46

标签: android sqlite

我在dbhandler类中构建了max函数,如下所示:

@Override
public int getIDmax() {
    int MAX =0;
    SQLiteDatabase db = this.getReadableDatabase();
    try{
        String QUERY = "SELECT MAX(KEY_MESSAGE_ID) AS KEY_MESSAGE_ID FROM "+TABLE_NAME ;
        Cursor cursor = db.rawQuery(QUERY,null);
        MAX =cursor.getColumnIndex(KEY_MESSAGE_ID);
        db.close();
        return MAX;

    }catch (Exception e){
        Log.e("error",e+"");
    }
   return 0;
}

现在我想在KEY_MESSAGE_ID列中获得最大数量 我在主要活动中的代码如下:

int b = handler.getIDmax();
            Toast.makeText(getApplicationContext(),""+b,Toast.LENGTH_LONG).show();

但是当我运行应用程序时它返回0; 有什么问题???

1 个答案:

答案 0 :(得分:2)

你犯了一个错误来恢复价值, 你得到的是索引,而不是值。

要获取该值,请致电

  

cursor.getInt(IndexColumn注解)

您可以使用getIndexColumn或对此索引进行硬编码(对此查询是安全的)

PS:我不确定开头的光标位置,所以我会设置位置以确保

  

cursor.moveToFirst()

编辑:这是我将如何做(未经测试)

@Override
public int getIDmax() {
    int MAX = -1;
    SQLiteDatabase db = this.getReadableDatabase();
    try{
        String QUERY = "SELECT MAX(_message_id)  FROM "+TABLE_NAME ;
        Cursor cursor = db.rawQuery(QUERY,null);
        cursor.moveToFirst(); //Set the position to the beginning, current position is -1. You can check if there is something in the cursor since this return a boolean
        MAX = cursor.getInt(0);

        db.close();
    }catch (Exception e){
        Log.e("error",e+"");
    }
    return MAX;
}