【发布时间】:2020-01-12 07:18:00
【问题描述】:
假设我的发票表中只有一条记录。
在我的发票表中插入新行时,如果出现错误,我会收到以下消息:“语句已回滚”。
现在如果我插入一张新发票,我在发票表中得到的 id 是 id=3 的 id=2。
这是我的发票表 DDL:
CREATE TABLE "APP"."INVOICES" ("ID" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "INVOICEDATE" DATE NOT NULL, "ISCASHINVOICE" BOOLEAN NOT NULL, "CUSTOMERID" INTEGER, "DISCOUNT" DECIMAL(12,2), "ADDITIONALCHARGE" DECIMAL(12,2), "ADDITIONALTVACHARGE" DECIMAL(12,2),"GARANTIEID" INTEGER,"INVOICETOTAL" DECIMAL(12,2),"TYPEPAYEID" INTEGER , "ISPAYEINVOICE" BOOLEAN NOT NULL DEFAULT FALSE);
如何解决这个问题发票ID应该正常自动递增。
我确实添加了这个:
System.setProperty("derby.language.sequence.preallocator", "1");
问题依然存在
【问题讨论】:
-
为什么要关心id是3还是2?这是一个系统生成的数字,它很容易是 47109 或 85852。你能解释一下为什么这会给你带来问题吗?如果您需要找出数字是多少,在插入新行之后,请使用此处描述的 JDBC 功能:stackoverflow.com/questions/1915166/…
-
我想要一个连续的发票 ID,没有间隙,这就是为什么。
-
这是一个有问题的设计目标有很多原因(仅举一个例子,如果你删除一行会发生什么?你会重新编号所有其他行吗?)。但如果这真的是您想要的,您可以尝试使用
select max(id) from invoices(在事务中),然后将该数字加 1,然后插入该值。例如。 stackoverflow.com/a/13282214 -
我会阻止用户删除发票。