Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 每次向表中添加动态数据时都会引发SQLiteConstraintException_Android_Sqlite - Fatal编程技术网

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);