5

我需要从 DB2 序列中获取下一个值。这是我尝试过的一种方法

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 Reference 关于 Sequences 的章节中所指定的那样。

NEXT VALUE FOR sequence-name
        NEXT VALUE 表达式生成并返回由 sequence-name 指定的序列的下一个值。
...
- NEXT VALUE 和 PREVIOUS VALUE 表达式可以在以下位置指定:
         · select-statement 或 SELECT INTO 语句(在 select-clause 中,前提是该语句不包含 DISTINCT 关键字、GROUP BY 子句、 ORDER BY 子句、UNION 关键字、INTERSECT 关键字或 EXCEPT 关键字)

于 2013-02-12T12:16:10.637 回答