将java.sql.Connection转换为oracle.jdbc.OracleConnection会导致编译错误

he

我想强制java.sql.Connection转换oracle.jdbc.OracleConnection为将数据绑定ARRAY到我的查询。

当我在scala 2.10上尝试以下操作时,bonecp 0.8.0和slick 2.0.0:

import com.jolbox.bonecp.ConnectionHandle
import oracle.jdbc.OracleConnection

def failsWithCompilationError() = {
  Database.forDataSource(ds).withDynTransaction {
    val connection = dynamicSession.conn.asInstanceOf[ConnectionHandle].getInternalConnection
    println(connection.unwrap(classOf[OracleConnection]))
    // When uncommenting following two lines a compilation error "error while loading AQMessage, class file '.../ojdbc6.jar(oracle/jdbc/aq/AQMessage.class)' is broken" will occur
    // val oracleConnection: OracleConnection = connection.unwrap(classOf[OracleConnection])
    // println(oracleConnection)
  }
}

并取消注释这两行,并分配给aval类型OracleConnectionprintln编译失败

[error] error while loading AQMessage, class file '.../ojdbc6.jar(oracle/jdbc/aq/AQMessage.class)' is broken 会发生。

我已经验证了通过从Oracle下载较新版本不应该破坏ojdbc6.jar。

he

看来问题出在Scala编译器上。

一旦将依赖的功能嵌入oracle.jdbc.OracleConnection到一个普通的旧Java类中,然后将其构建到一个单独的.jar中并与我的Scala代码链接,事情就开始流行起来。

这是我如何使其工作的方法:

OracleArray.java

package my.application.oracle.collections;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.OraclePreparedStatement;
import oracle.sql.ARRAY;
import scala.Long;
import scala.Tuple2;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/*
Wraps usage of Oracle ARRAYs since casting java.sql.Connection to oracle.jdbc.Connection does not compile on Scala.
*/
public class OracleArray {
    public static List<Tuple2<Long, Long>> fetchAssetsByIds(List ids, Connection connection) throws SQLException {
        OracleConnection oracleConnection = (OracleConnection) connection;
        ARRAY oracleArray = oracleConnection.createARRAY("MY_ARRAY_SQL_TYPE", ids.toArray());
        String sql = "SELECT a.id, a.value" +
                "FROM ASSET a " +
                "WHERE a.id IN (SELECT COLUMN_VALUE FROM TABLE(?))";
        PreparedStatement statement = oracleConnection.prepareStatement(sql);
        try {
            OraclePreparedStatement oraclePreparedStatement = (OraclePreparedStatement) statement;
            oraclePreparedStatement.setArray(1, oracleArray);
            ResultSet resultSet = oraclePreparedStatement.executeQuery();
            try {
                ArrayList<Tuple2<Long, Long>> resultTuples = new ArrayList<>();
                while (resultSet.next()) {
                    long id = resultSet.getLong(1);
                    long value = resultSet.getLong(2);
                    resultTuples.add(new Tuple2(id, value));
                }
                return resultTuples;
            } finally {
                resultSet.close();
            }
        } finally {
            statement.close();
        }
    }
}

DataUser.scala

package my.application

import my.application.oracle.collections.OracleArray

import scala.slick.driver.JdbcDriver.backend.Database
import Database.dynamicSession
import com.jolbox.bonecp.ConnectionHandle

import java.sql.Connection
import collection.JavaConversions._

/*
  Uses BoneCP and Slick to connect to database and relays java.sql.Connection to
  OracleArray in order to run operations that use Oracle ARRAYs
*/
object DataUser {
    def doSomethingWithAssets(ids: Seq[Long]): Unit = {
        Database.forDataSource(ds).withDynTransaction {
            val connection: Connection = dynamicSession.conn.asInstanceOf[ConnectionHandle].getInternalConnection
            val assets: Seq[(Long, Long)] = OracleArray.fetchAssetsByIds(ids, connection)
            println(assets)
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将java.sql.Connection转换为oracle.jdbc.OracleConnection会导致编译错误

来自分类Dev

类型不匹配:无法从java.sql.Connection转换为com.mysql.jdbc.Connection

来自分类Dev

JAVA/Oracle-weblogic.jdbc.wrapper.poolconnection_oracle_jdbc_driver_t4cconnection 无法转换为 oracle.jdbc.driver.oracleconnection

来自分类Dev

将Objective-C代码转换为Java会产生编译错误

来自分类Dev

将通过JDBC检索到的java.sql.Date值转换为java.time.LocalDate?

来自分类Dev

使用JDBC将String作为datetime2(0)插入SQL Server 2012会导致错误

来自分类Dev

使用JDBC将Java INSERT转换为SQL数据库

来自分类Dev

Option Strict导致LINQ语句内的编译错误(将“ Object”隐式转换为“ Control”)

来自分类Dev

java.lang.ClassCastException:org.apache.tomcat.dbcp.dbcp.PoolableConnection无法转换为oracle.jdbc.OracleConnection

来自分类Dev

如何将Jdbc4Connection转换为PGConnection?

来自分类Dev

将Oracle SQL转换为SQL Server

来自分类Dev

将数组从Java传递到Oracle:java.sql.SQLException:无法转换为内部表示形式:错误

来自分类Dev

将行从sql server转换为oracle

来自分类Dev

将行转换为ORACLE SQL列

来自分类Dev

将MS Access SQL转换为Oracle?

来自分类Dev

将行转换为列oracle SQL

来自分类Dev

将Oracle查询转换为SQL Server?

来自分类Dev

将 postgres sql 查询转换为 oracle

来自分类Dev

Java Spring JDBC SQL Server连接错误

来自分类Dev

org.h2.jdbc.JdbcSQLDataException:数据转换错误转换为“ MONTH”;SQL语句:

来自分类Dev

org.h2.jdbc.JdbcSQLDataException:数据转换错误转换为“ MONTH”;SQL语句:

来自分类Dev

将MS SQL函数转换为Oracle函数引发错误

来自分类Dev

STL map <string,string>,将0值分配给键会导致编译错误

来自分类Dev

将函数返回值传递给参考参数会导致GCC中的编译错误

来自分类Dev

在SQL中将CHAR转换为int会导致错误

来自分类Dev

将 SQL 转换为 PL/SQL 块 (ORACLE DB)

来自分类Dev

如何将 SQL SERVER 查询转换为 Oracle SQL?

来自分类Dev

将java.util.Date转换为java.sql.Date会截断时间部分

来自分类Dev

Spring JDBC + Postgres SQL + Java 8-从/到LocalDate的转换

Related 相关文章

  1. 1

    将java.sql.Connection转换为oracle.jdbc.OracleConnection会导致编译错误

  2. 2

    类型不匹配:无法从java.sql.Connection转换为com.mysql.jdbc.Connection

  3. 3

    JAVA/Oracle-weblogic.jdbc.wrapper.poolconnection_oracle_jdbc_driver_t4cconnection 无法转换为 oracle.jdbc.driver.oracleconnection

  4. 4

    将Objective-C代码转换为Java会产生编译错误

  5. 5

    将通过JDBC检索到的java.sql.Date值转换为java.time.LocalDate?

  6. 6

    使用JDBC将String作为datetime2(0)插入SQL Server 2012会导致错误

  7. 7

    使用JDBC将Java INSERT转换为SQL数据库

  8. 8

    Option Strict导致LINQ语句内的编译错误(将“ Object”隐式转换为“ Control”)

  9. 9

    java.lang.ClassCastException:org.apache.tomcat.dbcp.dbcp.PoolableConnection无法转换为oracle.jdbc.OracleConnection

  10. 10

    如何将Jdbc4Connection转换为PGConnection?

  11. 11

    将Oracle SQL转换为SQL Server

  12. 12

    将数组从Java传递到Oracle:java.sql.SQLException:无法转换为内部表示形式:错误

  13. 13

    将行从sql server转换为oracle

  14. 14

    将行转换为ORACLE SQL列

  15. 15

    将MS Access SQL转换为Oracle?

  16. 16

    将行转换为列oracle SQL

  17. 17

    将Oracle查询转换为SQL Server?

  18. 18

    将 postgres sql 查询转换为 oracle

  19. 19

    Java Spring JDBC SQL Server连接错误

  20. 20

    org.h2.jdbc.JdbcSQLDataException:数据转换错误转换为“ MONTH”;SQL语句:

  21. 21

    org.h2.jdbc.JdbcSQLDataException:数据转换错误转换为“ MONTH”;SQL语句:

  22. 22

    将MS SQL函数转换为Oracle函数引发错误

  23. 23

    STL map <string,string>,将0值分配给键会导致编译错误

  24. 24

    将函数返回值传递给参考参数会导致GCC中的编译错误

  25. 25

    在SQL中将CHAR转换为int会导致错误

  26. 26

    将 SQL 转换为 PL/SQL 块 (ORACLE DB)

  27. 27

    如何将 SQL SERVER 查询转换为 Oracle SQL?

  28. 28

    将java.util.Date转换为java.sql.Date会截断时间部分

  29. 29

    Spring JDBC + Postgres SQL + Java 8-从/到LocalDate的转换

热门标签

归档