[英]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.