0

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

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

我在我的数据库助手类中创建了以下内容(使用这篇文章作为指南:SQLiteDatabase.query 方法):

 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(即使有比数据库中存储的数字高的数字)。

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

4

1 回答 1

2

你的问题在这里:

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

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

int maxAreaNumber = 0;
if(c.moveToFirst())
{
    maxAreaNumber = c.getInt(1);
    // or cleaner
    maxAreaNumber = c.getInt(c.getColumnIndex("max"));
}
else
    // no data in cursor
于 2012-09-09T17:23:30.870 回答