使用JDBC连接到oracle从插入语句返回ROWID参数

我似乎无法获得正确的魔术组合来完成这项工作:

OracleDataSource ods = new oracle.jdbc.pool.OracleDataSource();

ods.setURL("jdbc:oracle:thin:app_user/pass@server:1521:sid");

DefaultContext conn = ods.getConnection();

CallableStatement st = conn.prepareCall("INSERT INTO tableA (some_id) VALUES (1) RETURNING ROWID INTO :rowid0");

st.registerReturnParameter(1, OracleTypes.ROWID);

st.execute();

我得到的错误是“违反协议”。如果更改为registerOutParameter(),则会收到通知我尚未注册所有返回变量。如果我将语句包装在PL /

SQL中,则开始;结束;

块,然后使用常规的registerOutParameter()调用即可得到参数。我真的更希望避免将我所有的insert语句包装在PL / SQL中-

上面缺少的是什么?

回答:

您需要做的几件事

  • 将CallableStatement更改为OracleCallableStatement
  • 尝试返回到NUMBER,即:OracleTypes.Number

用于从查询返回信息的示例代码:

OraclePreparedStatement pstmt = (OraclePreparedStatement)conn.prepareStatement(

"delete from tab1 where age < ? returning name into ?");

pstmt.setInt(1,18);

/** register returned parameter

* in this case the maximum size of name is 100 chars

*/

pstmt.registerReturnParameter(2, OracleTypes.VARCHAR, 100);

// process the DML returning statement

count = pstmt.executeUpdate();

if (count>0)

{

ResultSet rset = pstmt.getReturnResultSet(); //rest is not null and not empty

while(rset.next())

{

String name = rset.getString(1);

...

}

}

有关Oracle JDBC扩展的更多信息:

  • http://download-uk.oracle.com/docs/cd/B19306_01/java.102/b14355/oraint.htm

以上是 使用JDBC连接到oracle从插入语句返回ROWID参数 的全部内容, 来源链接: utcz.com/qa/403950.html

回到顶部