Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
glassfish 3.1.2-ResultSetWrapper40不能强制转换为oracle.jdbc.OracleResultSet_Oracle_Jdbc_Glassfish_Connection Pooling_Resultset - Fatal编程技术网

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

glassfish 3.1.2-ResultSetWrapper40不能强制转换为oracle.jdbc.OracleResultSet,oracle,jdbc,glassfish,connection-pooling,resultset,Oracle,Jdbc,Glassfish,Connection Pooling,Resultset,我最近从glassfish 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 f

我最近从glassfish 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上运行良好。

在这段代码中没有必要不使用标准JDBCAPI。您没有使用任何Oracle特定的功能,因此
rs.getBlob(“文件名”).getBinaryStream()
也可以使用


如果您坚持保留此选项,请关闭数据源的选项。

此代码中没有必要不使用标准JDBCAPI。您没有使用任何Oracle特定的功能,因此
rs.getBlob(“文件名”).getBinaryStream()
也可以使用


如果您坚持保留此选项,请关闭数据源的选项。

谢谢。我关闭了JDBC对象包装,但还必须将DataSourceName从OracleConnectionPoolDataSource转换为OracleDataSource,将资源类型转换为javax.sql.DataSource,而不是javax.sql.ConnectionPoolDataSource。使用不同的资源类型有什么后果吗?@maxqua72为什么不使用JDBC标准方法呢。代码中没有任何内容要求您使用Oracle特定的方法。是的,我会的,但我想了解其中任何一种方法。你的回答解决了我的问题,但我在这方面的知识还有很多不足之处。谢谢。@maxqua72需要将
ConnectionPoolDatasource
更改为
Datasource
,因为前者没有方法
getConnection()
getPooledConnection()
。OracleConnectionPoolDatasource实现了这两个接口。谢谢。我关闭了JDBC对象包装,但还必须将DataSourceName从OracleConnectionPoolDataSource转换为OracleDataSource,将资源类型转换为javax.sql.DataSource,而不是javax.sql.ConnectionPoolDataSource。使用不同的资源类型有什么后果吗?@maxqua72为什么不使用JDBC标准方法呢。代码中没有任何内容要求您使用Oracle特定的方法。是的,我会的,但我想了解其中任何一种方法。你的回答解决了我的问题,但我在这方面的知识还有很多不足之处。谢谢。@maxqua72需要将
ConnectionPoolDatasource
更改为
Datasource
,因为前者没有方法
getConnection()
getPooledConnection()
。OracleConnectionPoolDatasource实现这两个接口。