2011-10-25 6 views
0

oracleの列を自動インクリメントする直接的な方法はないと思うので、自動インクリメント列の更新を継続するトリガを追加したいと思います。シーケンスを使用してトリガーを起動する必要があり、それはそれぞれの列を更新します。だから私はjdbcでそれをやろうとしていました。どのようにjdbcの列をプリペアドステートメントを使用して自動インクリメントすることができますか?jdbcを使用してOracleの列を自動インクリメントする

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"); 
をシーケンスを参照することができます
関連する問題