java - HikariCP 通过 Oracle 自定义类型

标签 java oracle jdbc datasource hikaricp

我从 Oracle 默认数据源切换到 HikariCP。在一段代码中,我将自定义 Oracle 类型传递给存储的参数,并将 java.sql.Connection 转换为 oracle.jdbc.OracleConnection

try(OracleConnection connection = (OracleConnection) dbConnect.getConnection()) {
        try(CallableStatement callableStatement = connection.prepareCall("{? = call pkg_applications.add_application(?,?,?)}")) {
            callableStatement.registerOutParameter(1, Types.VARCHAR);
            callableStatement.setString(2, form.getPolicyNumber());
            callableStatement.setString(3, form.getPolicyStart());

            Object[][] uploads = new Object[wrappers.size()][];

            for(int i=0; i<wrappers.size(); i++) {
                uploads[i] = new Object[4];
                uploads[i][0] = wrappers.get(i).getName();
                uploads[i][1] = wrappers.get(i).getFile().getContentType();
                uploads[i][2] = wrappers.get(i).getFile().getSize();
                uploads[i][3] = wrappers.get(i).getLocation();
            }

            callableStatement.setArray(4, connection.createARRAY("T_UPLOAD_FILE_TABLE", uploads));

            callableStatement.execute();
            int applicationId = callableStatement.getInt(1);

            operationResponse.setData(applicationId);
            operationResponse.setCode(ResultCode.OK);
        }
    }
    catch(Exception e) {
        log.error(e.getMessage(), e);
    }

我得到一个 java.lang.ClassCastException - com.zaxxer.hikari.pool.HikariProxyConnection cannot be cast to oracle.jdbc.OracleConnection

如何使用 HikariCP 将 Oracle 自定义类型传递给存储过程?

最佳答案

您从池中获得的是代理连接。 要访问底层 Oracle 连接,您应该将 unwrap() 与 isWrapperFor() 结合使用:

try (Connection hikariCon = dbConnect.getConnection()) {
   if (hikariCon.isWrapperFor(OracleConnection.class)) {
      OracleConnection connection = hikariCon.unwrap(OracleConnection.class);
      :
      :
   }

但是,在您的示例中,OracleConnection 特定于哪个方法?你可能根本不需要转换!

关于java - HikariCP 通过 Oracle 自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40087536/

相关文章:

java - 通过java执行pl sql block 的问题

sql - oracle触发器上的编译错误

java - FindBugs:INT_VACUOUS_BIT_OPERATION

java - 基于内容的 Vaadin 10 网格样式单行

java - 替换所有抛出 PatternSyntaxException 的方法

oracle - 如何知道我的Oracle系统是否设置为支持Unicode或多字节字符?

java - 如何在运行 Junit 测试用例时创建用户 session

java - JDBC计算平均值

java - 使用 MVC 和 DAO 模式在 JSP 页面中的 HTML 中显示 JDBC 结果集

java - FileReader 在同一文件夹中找不到 XML 文件