Java OracleCallableStatement registerOutParameter不';我不喜欢命名绑定

Java OracleCallableStatement registerOutParameter不';我不喜欢命名绑定,java,jdbc,Java,Jdbc,此代码给出“错误设置或注册参数”SQLException。有人能帮忙吗 OracleConnection conn = getAppConnection(); String q = "BEGIN INSERT INTO tb (id) values (claim_seq.nextval) returning id into :newId; end;" ; CallableStatement cs = (OracleCallableStatement) conn.prepareCall(q); c

此代码给出“错误设置或注册参数”SQLException。有人能帮忙吗

OracleConnection conn = getAppConnection();
String q = "BEGIN INSERT INTO tb (id) values (claim_seq.nextval) returning id into :newId; end;" ;
CallableStatement cs = (OracleCallableStatement) conn.prepareCall(q);
cs.registerOutParameter("newId", OracleTypes.NUMBER);
cs.execute();
int newId = cs.getInt("newId");

JDBC不支持命名绑定,因此它停止在这里

要么使用索引占位符
,要么在支持命名参数的JDBC之上添加额外的抽象层,例如和/或


另见:

JDBC不支持命名绑定,因此它停止在这里

要么使用索引占位符
,要么在支持命名参数的JDBC之上添加额外的抽象层,例如和/或


另见:

更新:以下内容仅用于文档编制,但实际上不可用,因为您必须按照sql字符串中指定的顺序设置命名参数。所以它可以工作,但很容易出错。下面是:

使用OracleJDBC驱动程序版本10时,我在一个类似的星座中遇到了同样的错误,但在将jdbc驱动程序升级到版本11后,它对我来说是有效的。版本12.x也可以使用。 我的代码如下所示:

int nextIdent;
String sql = "call pkg.do_insert(:NEXT_IDENT, :SOME_COL, ...)";
try (CallableStatement stmt = conn.prepareCall(sql)) {
    stmt.registerOutParameter("NEXT_IDENT", Types.INTEGER);
    stmt.setString("SOME_COL", "abc");
    ...
    stmt.execute();
    nextIdent = stmt.getInt("NEXT_IDENT");
}

更新:以下内容仅用于文档编制,但实际上不可用,因为您必须按照sql字符串中指定的顺序设置命名参数。所以它可以工作,但很容易出错。下面是:

使用OracleJDBC驱动程序版本10时,我在一个类似的星座中遇到了同样的错误,但在将jdbc驱动程序升级到版本11后,它对我来说是有效的。版本12.x也可以使用。 我的代码如下所示:

int nextIdent;
String sql = "call pkg.do_insert(:NEXT_IDENT, :SOME_COL, ...)";
try (CallableStatement stmt = conn.prepareCall(sql)) {
    stmt.registerOutParameter("NEXT_IDENT", Types.INTEGER);
    stmt.setString("SOME_COL", "abc");
    ...
    stmt.execute();
    nextIdent = stmt.getInt("NEXT_IDENT");
}

newId
不是一个OUT参数,IIRC要求您使用存储过程
newId
不是一个OUT参数,IIRC要求您使用SE 5列表中名为binding的存储过程。但是,如果过程返回Oracle游标,则需要使用它,它似乎只有编号绑定。“顺序绑定和命名绑定不能组合!”SQL异常破坏了所有便利性。已在SE 5的列表中命名为binding。但是,如果过程返回Oracle游标,则需要使用它,它似乎只有编号绑定。“顺序绑定和命名绑定不能组合!”SQL异常破坏了所有便利性。