簡體   English   中英

使用java在oracle數據庫中自動遞增RowID

[英]Auto Increment RowID in oracle database using java

好吧我說我有一個有兩列的表。 Entry_id和名稱。 Entry_id是ROWID NOT NULL。 基本上我只是希望它在每次放入新內容時都會增加。我如何在PreparedStatement中執行此操作。 我不會知道正確的Entry_id bc無關緊要。 它應該每次都增加。 因此,如果我可以將名稱插入表中並且entry_id自動遞增,那將是很好的。 知道怎么做嗎?

ROWID是表中行的物理地址。 將ROWID用作鍵是沒有意義的 - 如果將表從一個表空間移動到另一個表空間,如果執行導出和導入,如果發生行移動等,則ROWID將隨時間而變化。等等有意義的是增加一個ROWID,因為結果很可能是無效的,因為它不再是實際行的物理地址,或者它不再是有效的物理地址。

如果要在Oracle中使用自動遞增主鍵,則應將該列聲明為NUMBER,而不是ROWID。 然后,您將創建一個序列對象

CREATE SEQUENCE entry_id_seq
  START WITH 1
  INCREMENT BY 1
  CACHE 100;

並在INSERT語句中引用該序列的NEXTVAL

INSERT INTO entry( entry_id, name )
  VALUES( entry_id_seq.nextval, :1 );

當然,您可以創建一個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;

然后,您的INSERT語句可以省略ENTRY_ID列,讓觸發器自動填充它。

INSERT INTO entry( name )
  VALUES( :1 );

如果您對數據庫相關的方式感到滿意,那么通常的方法是使用oracle序列

創建生成數據庫的序列之后,您的代碼將沿着這些行

p = conn.prepareStatement("insert into mytable (entry_id, name) values (mysequence.next_val,?)");
p.setString(1,"My Name");
p.executeUpdate();

我使用了關鍵字“oracle”和“autoincrement”。 發現這個: http//situsnya.wordpress.com/2008/09/02/how-to-create-auto-increment-columns-in-oracle/

通過將觸發器與序列結合使用,您不需要在插入中包含特定於oracle的構造,只需將entry_id的值保留在插入中的顯式值列表之外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM