当前位置: 首页 > 面试题库 >

Oracle RAW id列和JDBC

濮阳
2023-03-14
问题内容

我正在尝试开发一个简单的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不喜欢我在做什么呢?

提前致谢。


问题答案:

尝试使用RAWTOHEX和HEXTORAW。



 类似资料:
  • 问题内容: 具有以下简单的类结构: 我正在创建一个ArrayList来保留较早创建的类的对象: 我试图向每个列表中添加每个较早创建的类的1个对象:A,B,C。唯一可能的组合是: 将类A,B,C的对象添加到list4 将类B和C的对象添加到list5 将C类的对象添加到列表list6。其余尝试会导致编译器错误,例如我们: 类型List中的方法add(capture#1-of?extends A)不适

  • 我终于设法修复了头,使tbody可滚动,但我不知道如何对齐列。 我只想能够滚动通过tbody垂直与头固定在顶部和水平,如果需要通过两个在同一时间。 我不认为滚动条是问题,因为你可以在这里看到: 请注意蓝色和绿色的宽度不同。如果我将整行的宽度调整一个固定的量,这个差异仍然存在。 如果可能的话,获得100%CSS解决方案会很酷。 我的桌子看起来像这样:

  • 问题内容: 我在SQL表中有两列,即(int)和(varchar)。 有没有一种方法可以将它们都选择为一列并在它们之间留一个空格? 它们是不同的类型,所以我遇到了错误。 该字段将直接在Web应用程序的控件中进行数据绑定。 SQL Server 2008 (我有点SQL初学者) 问题答案: 字符串串联在数据库之间是不同的,因此它有助于了解哪个数据库,因为您需要了解: 串联方法/运算符 如果数据库处理

  • grid-template|auto/rows(行)|columns (列) 开始学习 Grid 要做的第一件事情就是划格子,本章主要给大家讲解如何画格子。掌握好这个掌握好这个技能是学习 Grid 布局的基础。 1. 官方定义 grid-template-columns 该属性是基于 网格列. 的维度,去定义网格线的名称和网格轨道的尺寸大小。 grid-template-rows 该属性是基于 网

  • 问题内容: 让 假设我要对列表中每个列表的索引元素求和,例如在矩阵列中添加数字以获得单个列表。我假设数据中的所有列表的长度均相等。 如何遍历列表列表而不会出现索引超出范围错误?也许lambda?谢谢! 问题答案: 您可以尝试以下方法: 这里使用的组合和解压的列表,然后根据自己的索引压缩的项目。然后,您可以使用列表推导来遍历相似索引的组,对其进行求和并返回其“原始”位置。 为了更清楚一点,下面是迭代

  • 问题内容: 为要求和的列创建索引比没有索引快吗? 问题答案: 抱歉,不清楚您要问什么。 您是否在询问,是否会加快查询速度,例如 是否添加了数量指标? 如果这是问题,那么答案是否定的。一般而言,当您需要在多行中查找几行时,索引会很有用;这里您需要所有行,因此索引无济于事。 有一个晦涩的例外(这种例外情况适用,因此大多数数据库优化器很少会不介意实施此技巧)。如果您的查询碰巧是 ,其中在foo上有一个索