使用java在oracle数据库中自动递增RowID

auw*_*all 2 java oracle prepared-statement

好吧我说我有一个有两列的表.Entry_id和名称.Entry_id是ROWID NOT NULL.基本上我只是希望它在每次放入新内容时都会增加.我如何在PreparedStatement中执行此操作.我不会知道正确的Entry_id bc无关紧要.它应该每次都增加.因此,如果我可以将名称插入表中并且entry_id自动递增,那将是很好的.知道怎么做吗?

Jus*_*ave 8

ROWID是表中行的物理地址.将ROWID用作键是没有意义的 - 如果将表从一个表空间移动到另一个表空间,如果执行导出和导入,如果发生行移动等,则ROWID将随时间而变化.等等有意义的是增加一个ROWID,因为结果很可能是无效的,因为它不再是实际行的物理地址,或者它不再是有效的物理地址.

如果要在Oracle中使用自动递增主键,则应将该列声明为NUMBER,而不是ROWID.然后,您将创建一个序列对象

CREATE SEQUENCE entry_id_seq
  START WITH 1
  INCREMENT BY 1
  CACHE 100;
Run Code Online (Sandbox Code Playgroud)

NEXTVAL在你的INSERT陈述中引用该序列

INSERT INTO entry( entry_id, name )
  VALUES( entry_id_seq.nextval, :1 );
Run Code Online (Sandbox Code Playgroud)

当然,您可以创建一个before-insert触发器来填充序列中的主键

CREATE OR REPLACE TRIGGER get_entry_id
  BEFORE INSERT ON entry
  FOR EACH ROW
IS
BEGIN
  SELECT entry_id_seq.nextval
    INTO :new.entry_id
    FROM dual;
END;
Run Code Online (Sandbox Code Playgroud)

INSERT然后,您的语句可以省略该ENTRY_ID列,让触发器自动填充它.

INSERT INTO entry( name )
  VALUES( :1 );
Run Code Online (Sandbox Code Playgroud)