Android Studio SQLite报错:inventory表无quantity列,求解决方案
问题解决:SQLite插入数据提示缺少quantity列的错误
错误根源
你的IventoryDB.java中创建表的SQL语句有语法漏洞:定义quantity列时,列名和数据类型之间没加空格,导致实际生成的列名变成了quantitytext,而非预期的quantity,所以插入时会提示找不到该列。
错误代码行:
db.execSQL("create table " + InventoryTable.TABLE + " (" + InventoryTable.COL_ID + " integer primary key autoincrement, " + InventoryTable.COL_ITEM + " text, " + InventoryTable.COL_QTY + "text)");
修复方法
修改onCreate方法里的SQL语句,在InventoryTable.COL_QTY和"text"之间补上空格:
@Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table " + InventoryTable.TABLE + " (" + InventoryTable.COL_ID + " integer primary key autoincrement, " + InventoryTable.COL_ITEM + " text, " + InventoryTable.COL_QTY + " text)"); // 此处添加空格 }
生效步骤
修复后需要让数据库重建表,二选一即可:
- 卸载当前APP后重新运行项目
- 在
AndroidManifest.xml中提高android:versionCode的值,触发onUpgrade方法删除旧表并重建
额外优化建议
- 因为
_id设置了autoincrement,无需手动传入ID,可简化代码:
// 修改addItem方法 public void addItem(String item, String qty) { SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); values.put(InventoryDB.InventoryTable.COL_ITEM, item); values.put(InventoryDB.InventoryTable.COL_QTY, qty); db.insert(InventoryDB.InventoryTable.TABLE, null, values); } // 调用处去掉id参数 DB.addItem(itemName, itemQuantity); // 同时删除Inventory.java中的private int id;变量
- 数量字段建议用整数类型存储,更符合业务逻辑:
// 表创建语句修改quantity类型为integer InventoryTable.COL_QTY + " integer)"); // 修改addItem方法参数类型 public void addItem(String item, int qty) { SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); values.put(InventoryDB.InventoryTable.COL_ITEM, item); values.put(InventoryDB.InventoryTable.COL_QTY, qty); db.insert(InventoryDB.InventoryTable.TABLE, null, values); } // 调用处转换为整数 int itemQuantity = Integer.parseInt(addItemQuantity.getText().toString()); DB.addItem(itemName, itemQuantity);
内容的提问来源于stack exchange,提问作者novice_python
相关产品推荐
相关产品推荐

