首页 > 解决方案 > Sqlite 数据库:ID 不会在 android 中自动递增

问题描述

我在我的应用程序中创建了一个本地数据库。我正在使用 SQLite 数据库。我使用“id”作为自动递增列,但问题是“id”不是自动递增的。它总是显示 0。我尝试了一切,但都徒劳无功。请帮忙!!

代码:

StringBuilder ingredientsTable = new StringBuilder();
ingredientsTable.append("CREATE TABLE ");
ingredientsTable.append(TABLE_INGREDIENTS);
ingredientsTable.append(" ( ");
ingredientsTable.append(KEY_ING_ID);
ingredientsTable.append(" INTEGER PRIMARY KEY AUTOINCREMENT, ");
ingredientsTable.append(KEY_ING_NAME);
ingredientsTable.append(" TEXT, ");
ingredientsTable.append(KEY_ING_AMOUNT);
ingredientsTable.append(" TEXT ");
ingredientsTable.append(" ) ");
db.execSQL(ingredientsTable.toString());

向表中插入数据

ModelInventory modelInventory = new ModelInventory();
modelInventory.setItemName(etItemName.getText().toString());
modelInventory.setItemAmount(Float.parseFloat(etAmount.getText().toString()));
modelInventory.setExpiryDate(etExpiryDate.getText().toString());
modelInventory.setRipeDate(etRipeDate.getText().toString());
modelInventory.setLocketQty(0);
dbHelper.addInventory(modelInventory);

数据库代码:

public void addInventory(ModelInventory modelInventory) {
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();

    ContentValues newValues = new ContentValues();
    newValues.put(KEY_ITEM_ID, modelInventory.getItemId());
    newValues.put(KEY_ITEM_NAME, modelInventory.getItemName());
    newValues.put(KEY_ITEM_AMOUNT, modelInventory.getItemAmount());
    newValues.put(KEY_RIPE_DATE, modelInventory.getRipeDate().toString());
    newValues.put(KEY_EXPIRY_DATE, modelInventory.getExpiryDate().toString());
    newValues.put(KEY_IS_LOCKED_ITEM, modelInventory.getLockedItem());
    newValues.put(KEY_QTY_LOCKED, modelInventory.getLocketQty());

    sqLiteDatabase.insert(TABLE_INVENTORY, null, newValues);
    sqLiteDatabase.close();
}

标签: javaandroidsqliteandroid-sqliteauto-increment

解决方案


您的代码的第一个问题是,为了创建表,您使用 3 个变量作为列的名称,例如KEY_ING_IDKEY_ING_NAMEKEY_ING_AMOUNT.
向表中插入数据时,您使用以下列名:KEY_ITEM_IDKEY_ITEM_NAMEKEY_ITEM_AMOUNTKEY_RIPE_DATEKEY_EXPIRY_DATE和。 那么如何通过向可能具有不同名称的 7 列提供值来将数据插入到具有 3 列的表中呢? 第二个问题是,当您希望列的行为类似于然后插入新行时不得为其分配值。 系统将提供该值。 所以删除这一行:KEY_IS_LOCKED_ITEMKEY_QTY_LOCKED


AUTO INCREMENT

newValues.put(KEY_ITEM_ID, modelInventory.getItemId());

推荐阅读