0

Android SQLite データベースに挿入クエリがあります。新しいレコードごとに自動インクリメントするキー ID フィールドを保持する必要があります。したがって、insert コマンドのセットアップの一環として、このフィールドの最大値を見つけて、それをインクリメントします。私のコードは 10 でインクリメントを停止することが判明しました。最初の 9 回の挿入ではすべて問題ありませんが、10 を超えることはありません。何が間違っているのでしょうか? ありがとう!

ここにコード:

public boolean createSubcategory(String subcategoryName) {
        
    int next;
    ContentValues newValues = new ContentValues();
    SQLiteDatabase db = myDBOpenHelper.getWritableDatabase();

    /* get the maximum value in the sub category table - this is the number to increment
     * and assign as the subcategory_id for our new subcategory record */
    cursor = db.query(SUBCATEGORIES_TABLE, new String [] {"MAX("+SUBCATEGORY_ID_COLUMN+") AS COL"}, null, null, null, null, null);

    /* Insert a row into the Subcategories table */
    if ( cursor.getCount() > 0 ) {
        cursor.moveToFirst();
        next = cursor.getInt(cursor.getColumnIndex("COL")) + 1;
    } else {next = 1;}
        
    newValues.put(SUBCATEGORY_ID_COLUMN, next);
    newValues.put(SUBCATEGORY_COLUMN, subcategoryName);
     
    db.insert(SUBCATEGORIES_TABLE, null, newValues);
    cursor.close();     
        
    System.err.println("New subcategory record created: ID: " + next + " Name: " + subcategoryName + "  Category ID: " + categoryID);
        
    return true;
}   

MainActivity からこれを呼び出す方法は次のとおりです。

private void createSubcategories(myDB db) {
    db.createSubcategory("Jazz");
    db.createSubcategory("Orchestra");
    db.createSubcategory("Rock");
    db.createSubcategory("Wine Tasting");
    db.createSubcategory("Lectures");
    db.createSubcategory("Book Signings");
    db.createSubcategory("Basketball");
    db.createSubcategory("Baseball");
    db.createSubcategory("Football");
    db.createSubcategory("Hockey");
    db.createSubcategory("Other");
    db.createSubcategory("Incrementer Test");
}

そして、これが私が得る出力です。subcategory_id が 10 で止まっているのがわかりますか?

新しいサブカテゴリ レコードが作成されました: ID: 1 名前: Jazz

新しいサブカテゴリ レコードが作成されました: ID: 2 名前: オーケストラ

新しいサブカテゴリ レコードが作成されました: ID: 3 名前: Rock

新しいサブカテゴリ レコードが作成されました: ID: 4 名前: Wine Tasting

新しいサブカテゴリ レコードが作成されました: ID: 5 名前: 講義

新しいサブカテゴリ レコードが作成されました: ID: 6 名前: Book Signings

新しいサブカテゴリ レコードが作成されました: ID: 7 名前: バスケットボール

新しいサブカテゴリ レコードが作成されました: ID: 8 名前: 野球

新しいサブカテゴリ レコードが作成されました: ID: 9 名前: フットボール

新しいサブカテゴリ レコードが作成されました: ID: 10 名前: ホッケー

新しいサブカテゴリ レコードが作成されました: ID: 10 名前: その他

新しいサブカテゴリ レコードが作成されました: ID: 10 名前: Incrementer テスト

4

1 に答える 1

0

検索は辞書式順序を使用して行われる可能性が非常に高く、「9」は「ASCII ベティカル」順序で「10」の後に来るため、クエリは常に 9 を返し、次は常に 10 になります。

あなたのIDは文字列ですか?

于 2013-05-22T19:04:14.247 に答える