【发布时间】:2017-03-08 15:58:19
【问题描述】:
我尝试使用 transactions 和 prepared statements 来更新表 INVENTORY 其中:
CREATE TABLE "INVENTORY" (
"product" VARCHAR NOT NULL,
"version" VARCHAR NOT NULL,
"lot" VARCHAR,
"barcode" VARCHAR,
"quantity" INTEGER,
PRIMARY KEY ("barcode")
);
我想做的是插入一个新行,但是如果在我的表中存在具有相同主键的行,则通过添加旧值 + 新值来更新它。
String sqInsert = "INSERT INTO INVENTORY VALUES ('100541026044','01','301610101','10054102604401301610101','5000')";
String sqUpdate = "UPDATE INVENTORY set quantity = quantity + 5000 where barcode='10054102604401301610101'";
// transaction block start
c.setAutoCommit(false);
stm = c.prepareStatement(sqInsert);
System.out.println("try to insert");
result = stm.executeUpdate();
System.out.println("try to update");
stm = c.prepareStatement(sqUpdate);
result = stm.executeUpdate();
c.commit(); //transaction block end
System.out.println("Done!");
在我的表中存在barcode=10054102604401301610101 的行,因此我希望执行更新。但是,我得到了
try to insert
Error inserting products :[SQLITE_CONSTRAINT] Abort due to constraint violation (UNIQUE constraint failed: INVENTORY.barcode)
注意:(我没有设置查询中的值,而是使用stm.setString(1, "string");)我只想在这里缩短代码
【问题讨论】:
-
您正在执行插入和更新。 (如果插入成功,则更新新行。)您需要一个 if/else。
-
@CL。你确定这两个查询都被执行了吗?如果是,为什么我没有进入控制台消息
try to update? -
我先反转了查询,更新然后插入,它起作用了..
标签: sqlite jdbc transactions