java - ResultSet.getBlob() 在 ojdbc8 上非常慢

标签 java sql oracle jdbc blob

我想升级我的项目的jdbc驱动程序。 目前我正在使用 ojdbc5.jar。 我想升级到ojdbc8.jar。

我注意到读取 blob 现在慢得多。

    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        try (final PreparedStatement statement = connection.prepareStatement("select * from BLOB_TABLE")) {
            try (ResultSet resultSet = statement.executeQuery()) {
                while (resultSet.next()) {
                    final Blob blob = resultSet.getBlob("MYBLOB");
                }
            }
        }
    }

该表包含 10.000 个条目。 使用 ojdbc5 驱动程序大约需要 0.1 秒。 使用 ojdbc8 驱动程序大约需要 5-6 秒。

我正在使用 Oracle Database XE 11.2 和 12.2 以及 Java 8。 有什么解决办法吗?

最佳答案

较新的驱动程序不仅可以获取 lob 定位器,还可以从 LOB 中预取数据。因此,调用 resultSet.getBlob(columnName) 的成本可能会更高,但调用 blob.getBytes() 的速度会更快。总的来说,新驱动程序的性能应该会更好。

关于java - ResultSet.getBlob() 在 ojdbc8 上非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49252582/

相关文章:

java - 如何在 Joda 中使用 JDK GregorianCalendar 对象日期

php数组分层

mysql - 将 MySQL 存储过程移植到 Oracle

sql - 如何在 JPA/Hibernate 中执行 native SQL 脚本?

Java - 使用 ActionListener 调用 JasperReport

java - Java 8 中的 interned 字符串是否适合垃圾回收?

java - 如何在java中设置到期日期

mysql - 优化运行时间约为 30 秒的 MySQL 查询

SQL 服务器 : How to update table based on subquery in where clause?

Oracle APEX 单点登录