java - 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();
}
解决方案
您的代码的第一个问题是,为了创建表,您使用 3 个变量作为列的名称,例如KEY_ING_ID
:KEY_ING_NAME
和KEY_ING_AMOUNT
.
向表中插入数据时,您使用以下列名:KEY_ITEM_ID
、KEY_ITEM_NAME
、KEY_ITEM_AMOUNT
、KEY_RIPE_DATE
、KEY_EXPIRY_DATE
和。
那么如何通过向可能具有不同名称的 7 列提供值来将数据插入到具有 3 列的表中呢?
第二个问题是,当您希望列的行为类似于然后插入新行时不得为其分配值。
系统将提供该值。
所以删除这一行:KEY_IS_LOCKED_ITEM
KEY_QTY_LOCKED
AUTO INCREMENT
newValues.put(KEY_ITEM_ID, modelInventory.getItemId());
推荐阅读
- php - 在 mysql 中,如何使用附加过滤器获取基于 php 数组的数据?
- php - 120 秒后 504
- sql - 当我需要从连接在一起的 2 个表和另一个表中插入时,如何在 sql 中使用 insert into from
- sql - 将 pandas 枢轴转换为 sql 枢轴(代码帮助)
- javascript - 可以将 CSS 背景图像列为 HTML 图像标记的脚本?
- c# - CA1001 在包含的扩展类(初学者类)上实现 IDisposable
- sql-server - 如何从一个表中获取日期并插入另一个表
- converse.js - converse.js:如何在登录表单中预填充用户名字段
- javascript - 比较嵌套对象中的值
- git - Git将多个分支合并到一个新分支中