Oracle RAW-ID-Spalten und JDBC

Ich versuche, ein einfaches Java-Servlet zu entwickeln, das eine Oracle 11g XE-Datenbank aufruft. Die bereitgestellte Datenbank verwendet RAW-Spaltentypen für die IDs aller Tabellen.

Anfangs habe ich versucht, die Daten einfach von JDBC zurückzugewinnen und base64 verschlüsselt die zurückgegebenen VARBINARY-Bytearrays, damit ich die Ergebnisse über JSON an das Front-End-System weitergeben kann. Nach der Base64-Dekodierung und dem Versuch, das Byte-Array auf die Spalte zurückzusetzen, gab Oracle / JDBC jedoch keine Daten zurück.

Ich habe beschlossen, Oracle die Codierung / Decodierung durchführen zu lassen, und konnte mit SQL Developer 2 die folgenden Abfragen in Oracle auslösen.

<code>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')
</code>

Wenn Sie diese Warteschlangen jedoch mit JDBC ausführen, gilt Folgendes:

<code>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) {}
 }
</code>

Ich erhalte folgenden Fehler:

<code>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)
</code>

Frage: Wie gehe ich am besten mit den RAW-ID-Spaltenbyte-Arrays um, wenn ich diese clientseitig weitergeben muss? Was mache ich falsch, wenn ich Oracle die Konvertierung durchführen lasse, die JDBC nicht mag?

Danke im Voraus.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage