当前位置: 首页 > 知识库问答 >
问题:

glassfish 3.1.2 - ResultSetWrapper40 不能强制转换为 oracle.jdbc.OracleResultSet

潘翰藻
2023-03-14

我最近从玻璃鱼 3.1.1 迁移到 3.1.2,出现以下错误

java.lang.ClassCastException: com.sun.gjc.spi.jdbc40.ResultSetWrapper40 cannot be cast to oracle.jdbc.OracleResultSet

在生产线上

oracle.sql.BLOB bfile = ((OracleResultSet) rs).getBLOB("filename");

在下面的例程中:

public void fetchPdf(int matricola, String anno, String mese, String tableType, ServletOutputStream os) {
    byte[] buffer = new byte[2048];
    String query = "SELECT filename FROM "
                + tableType + " where matricola = " + matricola
                + " and anno = " + anno
                + ((tableType.equals("gf_blob_ced") || tableType.equals("gf_blob_car")) ? " and mese = " + mese : "");

    InputStream ins = null;

    //--------
    try {

        Connection conn = dataSource.getConnection();
        //Connection conn = DriverManager.getConnection(connection, "glassfish", pwd);
        java.sql.Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(query);
        if (rs.next()) {
            logger.info("select ok " + query);
            oracle.sql.BLOB bfile = ((OracleResultSet) rs).getBLOB("filename");

            ins = bfile.getBinaryStream();

            int length;
            while ((length = (ins.read(buffer))) >= 0) {
                os.write(buffer, 0, length);
            }

            ins.close();

        } else {
            logger.info("select Nok " + query);
        }
        rs.close();
        stmt.close();
        //conn.close();

    } catch (IOException ex) {
        logger.warn("blob file non raggiungibile: "+query);
    } catch (SQLException ex) {
        logger.warn("connessione non riuscita");
    }
}

我正在使用玻璃鱼连接池

@Resource(name = "jdbc/ape4")
    private DataSource dataSource;

并且 JDBC/APE4 资源属于具有以下参数的 Oracle 连接池

NetworkProtocol tcp
LoginTimeout    0
PortNumber  1521
Password    xxxxxxxx
MaxStatements   0
ServerName  server
DataSourceName  OracleConnectionPoolDataSource
URL jdbc:oracle:thin:@server:1521:APE4
User    glassfish
ExplicitCachingEnabled  false
DatabaseName    APE4
ImplicitCachingEnabled  false

oracle驱动程序是ojdbc6.jar,oracle DB是10g。

谁能帮我发生了什么?在Glassfish 3.1.1上,它工作正常。

共有1个答案

姬向明
2023-03-14

在此代码中不需要不使用标准JDBC api。您没有使用任何Oracle特定的功能,因此rs.getBlob("filename"). getBinary Stream()也可以正常工作。

如果您坚持保留此选项,请关闭数据源的 JDBC 对象包装选项。

 类似资料: