2011-10-25 41 views
0

我想添加一個觸發器,它將繼續將autoincrement列更新爲1,因爲我認爲沒有直接的方法來自動增加oracle中的列。你必須使用序列,然後觸發觸發器,並將更新各自的列。所以我試圖在jdbc中做到這一點。如何使用預準備語句自動增加jdbc中的列。AutoIncrement Oracle中使用jdbc的列

String s1 = "create table crawler " + 
        "(id number NOT NULL PRIMARY KEY, " + 
        "url varchar(255) NOT NULL, " + 
        "urlHash varchar(255) NOT NULL, " + 
        "contentHash varchar(255), " + 
        "modDate varchar(50), " + 
        "contentLocation varchar(100), " + 
        "status integer, " + 
        "lastCrawlDate date) "; 

        String seq = "test_seq"; 

        String s2 = "create sequence" + seq + " start with 1 increment by 1 nomaxvalue"; 
        String s3 = "create or replace trigger inserttrigger before insert on test for each row begin select test_seq.nextval into :new.id from dual; end;"; 

        stmt=conn.createStatement(); 
        stmt.executeUpdate(s1); 
        stmt.executeUpdate(s2); 
        stmt.executeUpdate(s3); 

        ps = conn.prepareStatement (
        "INSERT INTO crawler (id, url, urlHash, contentHash, modDate, contentLocation, status, lastCrawlDate) VALUES(?,?,?,?,?,?,?,?)"); 

//how to write this first value as I know you can increment the column using sequencename.nextval but how to do here in prepared statement. 
        ps.setString (1, seq.nextVal); 
        ps.setString (2, "http://www.google.com"); 
        ps.setString (3, "swerrsdfsfdgfgrgthtyty"); 
        ps.setString (4, "1a10407d9a7997531aabe53fb367efbc"); 
        ps.setString (5, "1a10407d9a7997531aabe53fb367efbc"); 
        ps.setString (6, "1a10407d9a7997531aabe53fb367efbc"); 
        ps.setString (7, "302"); 
        ps.setString (8, "2011-11-27"); 

回答

4

您不需要使用觸發器。

在你準備statemen的sql可以是:

String insert = "INSERT INTO crawler (id, url, urlHash, contentHash, modDate, contentLocation, status, lastCrawlDate)" 
+ " VALUES(test_seq.nextval,?,?,?,?,?,?,?)"; 

所以你只能將餘下的7個參數。

2

如果創建觸發器,你會簡單地從你的INSERT

ps = conn.prepareStatement (
        "INSERT INTO crawler (url, urlHash, contentHash, modDate, contentLocation, status, lastCrawlDate) VALUES(?,?,?,?,?,?,?)"); 
ps.setString (1, "http://www.google.com"); 
ps.setString (2, "swerrsdfsfdgfgrgthtyty"); 
ps.setString (3, "1a10407d9a7997531aabe53fb367efbc"); 
ps.setString (4, "1a10407d9a7997531aabe53fb367efbc"); 
ps.setString (5, "1a10407d9a7997531aabe53fb367efbc"); 
ps.setString (6, "302"); 
ps.setString (7, "2011-11-27"); 

或者省略ID列,你可以跳過創建觸發器,只需簡單地引用序列在INSERT

ps = conn.prepareStatement (
        "INSERT INTO crawler (id, url, urlHash, contentHash, modDate, contentLocation, status, lastCrawlDate) VALUES(test_seq.nextval,?,?,?,?,?,?,?)"); 
ps.setString (1, "http://www.google.com"); 
ps.setString (2, "swerrsdfsfdgfgrgthtyty"); 
ps.setString (3, "1a10407d9a7997531aabe53fb367efbc"); 
ps.setString (4, "1a10407d9a7997531aabe53fb367efbc"); 
ps.setString (5, "1a10407d9a7997531aabe53fb367efbc"); 
ps.setString (6, "302"); 
ps.setString (7, "2011-11-27");