oracle rawid长度,Oracle RAW id列和JDBC

我正在尝试开发一个简单的Java servlet,它调用Oracle 11g XE数据库。提供给我的数据库使用RAW列类型作为所有表上的ID。

最初,我尝试只从JDBC中获取数据,然后对返回的VARBINARY字节数组进行base64编码,以便将结果通过JSON传递给前端系统。但是,在对base64进行解码并尝试将字节数组设置回该列之后,Oracle

/ JDBC没有返回数据。

我决定尝试让Oracle执行编码/解码,并能够使用SQL Developer 2在Oracle中触发以下查询。

SELECT utl_encode.base64_encode(IDCOLUMN), FIRST_NAME FROM TABLENAME

SELECT utl_encode.base64_encode(IDCOLUMN), FIRST_NAME FROM TABLENAME WHERE IDCOLUMN = utl_encode.base64_decode('BASE64STRING')

但是,在使用JDBC执行这些查询时:

conn = isConnSupplied ? userConn : ResourceManager.getConnection();

Statement stmt = conn.createStatement();

try {

ResultSet rset = stmt.executeQuery("SELECT utl_encode.base64_encode(IDCOLUMN), FIRST_NAME FROM TABLENAME");

try {

while (rset.next())

System.out.println (rset.getString(1)); // Print col 1

}

finally {

try { rset.close(); } catch (Exception ignore) {}

}

}

finally {

try { stmt.close(); } catch (Exception ignore) {}

}

我收到以下错误:

java.sql.SQLException: ORA-29261: bad argument

ORA-06512: at "SYS.UTL_ENCODE", line 8

ORA-06512: at "SYS.UTL_ENCODE", line 243

oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)

oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)

oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)

oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)

oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)

oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)

oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:193)

oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:866)

oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167)

oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289)

oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1491)

oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:406)

com.pearson.familyportal.servlet.WebController.doPost(WebController.java:97)

com.pearson.familyportal.servlet.WebController.doGet(WebController.java:171)

javax.servlet.http.HttpServlet.service(HttpServlet.java:621)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

问题:当我必须在客户端传递这些数据时,处理RAW ID列字节数组的最佳方法是什么?如果让Oracle进行转换,那么JDBC不喜欢我在做什么呢?

提前致谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值