我在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; 有什么问题???
答案 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;
}