Android 每次向表中添加动态数据时都会引发SQLiteConstraintException
我创建了一个表,并将元素添加到表中,如下所示: ` 然后在我的代码中,我使用以下代码向表中添加值Android 每次向表中添加动态数据时都会引发SQLiteConstraintException,android,sqlite,Android,Sqlite,我创建了一个表,并将元素添加到表中,如下所示: ` 然后在我的代码中,我使用以下代码向表中添加值 for (PendingOrdersDao cn : allPendingOrders) { //int _id, String _shipmentNo, String _shipmentRefNo, String _proformoInvoiceNumber, String _proformoInvoiceDate,
for (PendingOrdersDao cn : allPendingOrders) {
//int _id, String _shipmentNo, String _shipmentRefNo, String _proformoInvoiceNumber, String _proformoInvoiceDate, String _shipmentDate, String _pointOfContact, String _product, String _quantity, String _rate, String _amount, String _productImage, String _shipmentStatus) {
myitems.add(new PendingOrdersDao(cn.getId(), cn.getSipmentNo(), cn.getShipmentRefNo(), cn.getProformoInvoiceNumber(), cn.getProformoInvoiceDate(), cn.getShipmentDate(), cn.getPointOfContact(), cn.getProduct(), cn.getQuantity(), cn.get_rate(), cn.getAmount(), cn.getProductImage(), cn.getShipmentStatus()));
}
每次单击视图时,都将使用截取检索值,这些值将存储在数据库中。第一次单击视图时,数据被添加到数据库中,没有任何问题。下一次,如果单击视图,将再次检索新值,但在将新获取的数据添加到表中时,将抛出SQLiteConstraintException错误。我猜这是因为表中旧值的id和插入到表中的新值都是相同的。有什么方法可以处理这个错误吗?如何清除表中的记录并插入新获取的数据而不获取sqlite约束异常
错误日志
android.database.sqlite.SQLiteConstraintException:列id不是
唯一(代码19)
位于android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(本机
(方法)
位于android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:973)
位于android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
这是我用来创建表的查询
String CREATE_PENDING_ORDERS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_PENDINGORDERS + "("
+ KEY_ID + " INT PRIMARY KEY NOT NULL,"
+ KEY_SHIPMENT_NO + " TEXT NOT NULL,"
+ KEY_SHIPMENT_REF_NO + " TEXT NOT NULL,"
+ KEY_PRO_INV_NO + " TEXT NOT NULL,"
+ KEY_PRO_INV_DATE + " TEXT NOT NULL,"
+ KEY_SHIPMENT_DATE + " TEXT NOT NULL,"
+ KEY_PT_OF_CONTACT + " TEXT NOT NULL,"
+ KEY_PRODUCT + " TEXT NOT NULL,"
+ KEY_QTY + " TEXT NOT NULL,"
+ KEY_RATE + " TEXT NOT NULL,"
+ KEY_AMOUNT + " TEXT NOT NULL,"
+ KEY_PRODUCT_IMG + " TEXT NOT NULL,"
+ KEY_SHIPMENT_STAT + " TEXT NOT NULL"
+ ")";
我自己解决了。下面是动态插入数据的方法
db.insertWithOnConflict(TABLE_PENDINGORDERS, null,
values, SQLiteDatabase.CONFLICT_REPLACE);
CONFLICT\u REPLACE
所做的是,每次定义为主键的in键中出现冲突时,它都会用新记录替换整行。如果你想告诉你的应用程序忽略这些错误,你也可以使用CONFLICT\u IGNORE
,请显示你的stacktrace.。我第一次发布了错误日志,正确插入了值,但第二次插入了相同id的值,因为我想让我的应用程序显示新获取的数据。这导致了问题。我如何处理这个问题?所以请在创建数据库表的地方发布您的sqlite字符串…您不能插入两个具有相同id的值!!!这就是产生此错误的原因
db.insertWithOnConflict(TABLE_PENDINGORDERS, null,
values, SQLiteDatabase.CONFLICT_REPLACE);