5

DB2 シーケンスから次の値を取得する必要があります。これは私が試した1つのアプローチです

stmt = con.createStatement();
rs = stmt.executeQuery("db2 VALUES NEXTVAL FOR <sequence_name>"); 

rs.close();
stmt.close(); 

私が得るエラーは次のとおりです。

com.ibm.db2.jcc.c.SqlException: [ibm][db2][jcc][10103][10941] Method executeQuery cannot be used for updates.
           at com.ibm.db2.jcc.c.qh.a(qh.java:2390)
           at com.ibm.db2.jcc.c.qh.a(qh.java:1751)
           at com.ibm.db2.jcc.c.qh.a(qh.java:478)
           at com.ibm.db2.jcc.c.qh.executeQuery(qh.java:462)
           at test.pack.SequenceConn.getNextSequenceValue(SequenceConn.java:59)
           at test.pack.SequenceConn.main(SequenceConn.java:22)

シーケンスから次の値を取得するにはどうすればよいですか?

4

2 に答える 2

5

なんとか自分で解決できました。

stmt = con.createStatement();
rs = stmt.executeQuery("VALUES NEXTVAL FOR <sequence_name>"); 

rs.close();
stmt.close();

基本的db2に、クエリ文字列の前の文字列が問題の原因でした。それを削除し、シーケンス値を取得することができました。

于 2013-02-12T12:57:45.983 に答える
1

次の文を使用して、DB2 のシーケンスの次の値を取得できます。

stmt = con.createStatement();
rs = stmt.executeQuery("SELECT NEXT VALUE FOR <sequence_name>"); 
if(rs.next()) {
    Long sequenceValue = rs.getLong(1);
}
rs.close();
stmt.close(); 

シーケンスに関する DB2 リファレンスの章で指定されているとおり。

NEXT VALUE FOR sequence-name
        NEXT VALUE 式は、sequence-name で指定されたシーケンスの次の値を生成して返します。
...
- NEXT VALUE および PREVIOUS VALUE 式は、次の場所で指定でき
         ます。 ORDER BY 句、UNION キーワード、INTERSECT キーワード、または EXCEPT キーワード)

于 2013-02-12T12:16:10.637 に答える