无法查询数据库表中的最大数量

时间:2012-09-09 17:12:10

标签: android database sqlite max

我正在尝试查询我的数据库以找到最大的“区号”,在我的区域表中进行某次检查,以便我可以将表单中的文本设置为下一个区号。

数据库表由四列组成; _id,inpsection_link,area_number,area-reference。

我在数据库助手类中创建了以下内容(使用此帖子作为指南:SQLiteDatabase.query method):

 public int selectMaxAreaNumber (long inspectionId) {
    String inspectionIdString = String.valueOf(inspectionId);
    String[] tableColumns = new String[] { 
            AREA_NUMBER, 
            "(SELECT max(" + AREA_NUMBER + ") FROM " + AREAS_TABLE + ") AS max" 
        }; 
    String whereClause = INSPECTION_LINK + " = ?";
    String[] whereArgs = new String[] {
            inspectionIdString          
        };
    Cursor c = rmDb.query(AREAS_TABLE, tableColumns, whereClause, whereArgs, 
            null, null, null);
    int maxAreaNumber = c.getColumnIndex("max");
    return maxAreaNumber;
}

然后我在areaEdit类中调用如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    rmDbHelper = new RMDbAdapter(this);
    rmDbHelper.open();
    Intent i = getIntent();
    inspectionId = i.getLongExtra("Intent_InspectionID", -1);
    areaId = i.getLongExtra("Intent_AreaID", -1);
    if (areaId == -1) {
        nextAreaNumber = rmDbHelper.selectMaxAreaNumber(inspectionId) + 1;
        Toast.makeText(getApplicationContext(), String.valueOf(nextAreaNumber), 
                Toast.LENGTH_LONG).show();  
    }
    setContentView(R.layout.edit_area);
    setUpViews();
    populateFields();
    setTextChangedListeners();
}

但是,它每次只返回1(即使数字高于数据库中存储的数字)。

Confused.com !!任何帮助非常感谢。

1 个答案:

答案 0 :(得分:2)

您的问题在这里:

int maxAreaNumber = c.getColumnIndex("max");

您的列索引为max 1 ,因为您的查询中只有一列。 相反,做这样的事情:

int maxAreaNumber = 0;
if(c.moveToFirst())
{
    maxAreaNumber = c.getInt(1);
    // or cleaner
    maxAreaNumber = c.getInt(c.getColumnIndex("max"));
}
else
    // no data in cursor