0

我在 Android SQLite 数据库中有一个插入查询。我需要保留一个为每条新记录自动递增的关键 id 字段。因此,作为我的插入命令设置的一部分,我在该字段中找到最大值,然后将其递增。事实证明,我的代码在 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 名称:Orchestra

创建了新的子类别记录:ID:3 名称:Rock

创建了新的子类别记录:ID:4 名称:Wine Tasting

创建了新的子类别记录:ID:5 名称:Lectures

创建了新的子类别记录:ID:6 名称:Book Signings

创建了新的子类别记录:ID:7 名称:篮球

创建了新的子类别记录:ID:8 名称:棒球

创建了新的子类别记录:ID:9 名称:足球

创建了新的子类别记录:ID:10 名称:Hockey

创建了新的子类别记录:ID:10 名称:其他

创建了新的子类别记录:ID:10 名称:Incrementer test

4

1 回答 1

0

很有可能使用字典顺序进行搜索,并且由于“9”在“ASCII-betical”顺序中位于“10”之后,因此您的查询总是返回 9,下一个总是 10。

你的 ID 是字符串吗?

于 2013-05-22T19:04:14.247 回答