Android SQLite-无法更新id列具有长文本的行
因此,我正在Android Studio上开发这个库存管理应用程序,在向数据库中添加一定数量的产品时遇到了问题。我的数据库类中有一个名为Android SQLite-无法更新id列具有长文本的行,android,sqlite,sql-update,Android,Sqlite,Sql Update,因此,我正在Android Studio上开发这个库存管理应用程序,在向数据库中添加一定数量的产品时遇到了问题。我的数据库类中有一个名为updateQuantity的方法。它需要添加一个条形码号和一个数量,并且应该更新产品数量。 private static final String TABLE_PRODUCT = "product"; private static final String COLUMN_PRODUCT_BARCODE_NUMBER = "barcode_number"; /
updateQuantity
的方法。它需要添加一个条形码号和一个数量,并且应该更新产品数量。private static final String TABLE_PRODUCT = "product";
private static final String COLUMN_PRODUCT_BARCODE_NUMBER = "barcode_number"; // TEXT
private static final String COLUMN_PRODUCT_QUANTITY = "quantity"; // INTEGER
private static final String COLUMN_PRODUCT_NAME = "name"; // TEXT
private static final String COLUMN_PRODUCT_PURCHASE_PRICE = "purchase_price"; //INTEGER
private static final String COLUMN_PRODUCT_SALE_PRICE = "sale_price"; // INTEGER
public boolean updateQuantity(String barcode, int amount) {
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_PRODUCT + " SET " + COLUMN_PRODUCT_QUANTITY +
" = ((SELECT " + COLUMN_PRODUCT_QUANTITY + " FROM " +
TABLE_PRODUCT + " WHERE " + COLUMN_PRODUCT_BARCODE_NUMBER +
" = " + barcode + ") + " + amount + ") WHERE " +
COLUMN_PRODUCT_BARCODE_NUMBER + " = " + barcode;
try {
db.execSQL(query);
} catch (Exception e) {
return false;
}
return true;
}`
它适用于条码号为“86938693”的产品,但不会对条码号为“8690632034614”的产品进行任何数量更新。这里的问题是什么?您创建了一个非常复杂的sql语句,但应该简单得多:
String query =
"UPDATE " + TABLE_PRODUCT +
" SET " + COLUMN_PRODUCT_QUANTITY + " = " + COLUMN_PRODUCT_QUANTITY + " + " + amount +
" WHERE " + COLUMN_PRODUCT_BARCODE_NUMBER + " = '" + barcode + "'";
不必搜索两次表就可以获得要更新的值此外,变量条形码的值必须用单引号括起来,因为它是一个字符串。
如果列
列产品数量的值为空
,则必须使用:
“86938693”可以转换为长整数,但“8690632034614”不能。我怀疑SQLite正在将您给定的值隐式转换为它通常期望的主键,即长整数,而不管列定义为什么(是的,SQLite会这样做)。如果SQLite的主键是在非长整数的列上定义的,则在某些情况下(如本例),表将被视为只读,更新将失败。如果您检查异常而不是忽略它,它将给您一个关于发生了什么的提示。我更怀疑查询是否适用于任何情况,因为您没有在字符串周围添加任何“
。也许系统会进行一些自动转换,将字符串列与给定的数字进行比较(因为如果没有“您的条形码在查询中被视为数字”),当数字变得太大时会失败。不要尝试将未知字符串值直接粘贴到SQL语句中;将值绑定到参数。有关详细信息,请参阅您的文档。它不会引发任何异常,并且将“
添加到条形码
的侧面不会更改任何内容,因此您的方法返回true?您确定两个表中都包含带有该条形码的记录吗?您的条形码列是否具有固定宽度?这完全是关于数量值为空。下面的代码对我有用,谢谢。
String query =
"UPDATE " + TABLE_PRODUCT +
" SET " + COLUMN_PRODUCT_QUANTITY + " = coalesce(" + COLUMN_PRODUCT_QUANTITY + ", 0) + " + amount +
" WHERE " + COLUMN_PRODUCT_BARCODE_NUMBER + " = '" + barcode + "'";