H2DB - executeUpdate()在DELETE上返回0或1,具体取决于表定义

时间:2017-08-28 14:11:26

标签: jdbc h2

我想知道是否有人可以在从相当简单的表中删除条目时解释H2 JDBC驱动程序的行为。

使用下表定义时,如果删除了一个条目(预期行为),executeUpdate()实例的方法PreparedStatement将返回1

CREATE TABLE IF NOT EXISTS "MATERIAL" (
    "CODE" VARCHAR(5) NOT NULL,
    "NAME" VARCHAR(100) NOT NULL
);

PRIMARY KEY列上添加CODE约束时,相同的方法会返回0,尽管该条目已成功删除(不期望行为)。

CREATE TABLE IF NOT EXISTS "MATERIAL" (
    "CODE" VARCHAR(5) NOT NULL,
    "NAME" VARCHAR(100) NOT NULL,
    PRIMARY KEY ("CODE")
);

最有趣的是,当添加INT类型的列作为PRIMARY KEY时,返回值再次为1

CREATE TABLE IF NOT EXISTS "MATERIAL" (
    "ID" INT NOT NULL AUTO_INCREMENT,
    "CODE" VARCHAR(5) NOT NULL,
    "NAME" VARCHAR(100) NOT NULL,
    PRIMARY KEY ("ID")
);

是否有人能够重建这种行为并可能以某种方式向我解释?

我已经使用maven包含了当前版本的H2 DB。

编辑:

如果我最终为UNIQUE列添加CODE约束,则返回值再次为0 ...

CREATE TABLE IF NOT EXISTS "MATERIAL" (
    "ID" INT NOT NULL AUTO_INCREMENT,
    "CODE" VARCHAR(5) NOT NULL UNIQUE,
    "NAME" VARCHAR(100) NOT NULL,
    PRIMARY KEY ("CODE")
);

编辑2:

用于删除条目的查询如下所示(在PreparedStatement中使用):

DELETE FROM MATERIAL WHERE CODE = ?

解决方案:

我很抱歉让你烦恼。实际上,表定义或JDBC驱动程序没有问题。这是我的测试数据 - 从早期的测试中我想要INSERT两个具有相同CODE的条目。这是一个多行插入 - 显然这是失败的,当CODE是PK或具有UNIQUE索引时。因此,在这种情况下,executeUpdate()只能返回0,因为表格中根本没有数据。

0 个答案:

没有答案
相关问题