0

失敗しましたが、データベースにクエリを実行して、特定の検査のためにエリアテーブルで最大の「エリア番号」を見つけようとしています。これにより、フォームのテキストを次のエリア番号に設定できます。

データベーステーブルは4つの列で構成されています。_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を返すだけです(データベースに格納されている数よりも多い数であっても)。

Confused.com !! どんな助けでも大歓迎です。

4

1 に答える 1

2

あなたの問題はここにあります:

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

クエリに列が1つしかないため、列インデックス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 に答える