- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以从数据库中获取 CLOB 值,但如果值大于 32k,则会出现错误:
java.sql.SQLRecoverableException: Closed Connection
at oracle.sql.CLOB.getDBAccess(CLOB.java:1510)
at oracle.sql.CLOB.getSubString(CLOB.java:317)
代码:
List<Map<String, Object>> resultListMap = null;
try {
new DbUtilsBeanListHandlerImpl();
DbUtils.loadDriver(driver);
Properties connectionProperties = new Properties();
connectionProperties.put("user", userName);
connectionProperties.put("password", password);
conn = DriverManager.getConnection(url, connectionProperties);
QueryRunner query = new QueryRunner();
resultListMap = query.query(conn, dbQuery, new MapListHandler());
} catch (SQLException se) {
logger.error("SQLException to connect Database "+se.getMessage(), se);
} finally {
DbUtils.closeQuietly(conn);
}
如何使用 dbUtils 获取超过 32k 的 CLOB 对象?
最佳答案
这个问题并不是 Apache Commons DbUtils 的问题,而是涉及 CLOB 的普遍问题。
通常,当执行返回 CLOB 值的查询时,JDBC 驱动程序在获取行时只会加载部分 CLOB 值。在你的例子中,它似乎需要大约 32K 字符。对于较小的 CLOB 值,这可以节省到数据库的往返次数以获取该值。但是,如果该值较大,驱动程序将无法获取整个值,并且您需要对数据库进行后续调用以获取 CLOB 的其余部分。
就您的情况而言,这似乎是在您上面提供的代码运行后发生的。此时,数据库连接已关闭,因此读取其余 CLOB 数据为时已晚,因此您会收到有关已关闭连接的异常。
更改此情况的一种方法是替换与 DbUtils 一起使用的默认行处理器。以下版本预取 CLOB 值并将它们存储为字符串。根据this answer ,对 CLOB 值调用 ResultSet.getString()
足以获取整个值:
import java.sql.Clob;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.dbutils.BasicRowProcessor;
public class ClobAwareRowProcessor extends BasicRowProcessor {
@Override
public Map<String, Object> toMap(ResultSet resultSet) throws SQLException {
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
int columnCount = resultSetMetaData.getColumnCount();
Map<String, Object> map = new HashMap<>();
for (int index = 1; index <= columnCount; ++index) {
String columnName = resultSetMetaData.getColumnName(index);
Object object = resultSet.getObject(index);
if (object instanceof Clob) {
object = resultSet.getString(index);
}
map.put(columnName, object);
}
return map;
}
}
要使用,请将 new MapListHandler()
替换为 new MapListHandler(new ClobAwareRowProcessor())
。
关于java - 如何在oracle11g中使用dbUtils获取CLOB列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43046722/
我按照此处的文档将 Azure Blob 存储容器安装到 Databricks: https://docs.databricks.com/_static/notebooks/data-sources/
我正在使用 apache dbutils。我有一个带有 java.util.Date 属性的对象。当我执行以下代码时,sql 失败 从 myTable 中选择名称、开始日期 try {
我是 Python 新手,需要 Databricks 方面的帮助。 我需要使用 Python 将文件从 Azure Blob 简单复制到 ADLS。 我需要 Python 文件中的代码,并且需要从 D
我有一个实例化单个 QueryRunner 的网络服务在初始化时使用数据源。它通过将这个 QueryRunner 对象作为 servlet 上下文属性传递给 webapp 使用的多个不同 servle
我在一个容器下有三个文件夹 文件夹结构 folder1 |_ file1.json |_ file2.json folder2 |_ sub-folder1 |_
我正在尝试使用 Jupyter Notebook Python 脚本(在 Docker 上运行)中的 DBUtils 和 Pyspark 来访问 Azure Data Lake Blob。但是,我似乎
我们需要使用第三方库来执行 SQL 语句,在开始实现之前,我们希望确保该库可以执行我们想要的任何操作。我们目前正在评估 Apache DBUtils。 我们尝试执行类似的查询 INSERT INTO
我有一个用于 jdbc 的 DBUtil 类,有一些方法,如查询、插入和更新,当发生一些错误时,我们现在抛出 RuntimeException,但我有一些问题。 当错误发生时,如果我不使用 try c
我正在尝试使用 ResultSetHandler 将学生列表传递给 servlet,但出现以下错误 java.lang.NumberFormatException: For input string:
我开始使用 DBUtils 库,但我的大多数查询都是“INSERT ON DUPLICATE KEY UPDATE”,我进行了研究,但没有找到有关如何使用 QueryRunner 对象实现该操作的信息
我发誓我以前做过这个并且效果很好,但似乎在我的查询(下面)中我无法映射同名的两列(在本例中为“电子邮件”),即使使用我查询中的“as”。我也尝试过不使用“as”——只使用“u.email assess
apache dbutils库是否可以调用oracle存储过程? 最佳答案 是的: QueryRunner run = JDBCConnectionFactory.getQueryRunner(dat
我需要使用 DBUtils 获取标量值,有人知道如何获取吗?目前我这样做: String sql = "SELECT count(*) FROM t1 WHERE cod = ?";
有人可以让我知道如何使用 databricks dbutils 从文件夹中删除所有文件。 我尝试了以下但不幸的是,Databricks 不支持通配符。 dbutils.fs.rm('adl://azu
我们如何尝试使用它? 将依赖项“com.databricks”%%“dbutils-api”%“0.0.1”添加到build.sbt 用代码编写: 导入 com.databricks.dbutils_
我找不到如何使用 DBUtils 来调用可调用语句 我们可以如何指定哪些所有字段都是输入以及哪些所有字段都是输出? 最佳答案 您只需要使用CallableStatement Connection co
Apache DBUtils 的 BeanHandler 在使用 SELECT 查询时可以方便地将数据映射到 Bean 中。但是,在写入数据时似乎不能做到同样的事情,所以我需要使用一种容易出错的方式:
我正在尝试使用 SQL Server 数据库上的 queryrunner 接口(interface)从列表中检索多条记录。似乎正常方法有效时接口(interface)会抛出错误。 private vo
我正在 Spring Framework 中创建 MVC Web 应用程序,我需要将 Apache DBUtils 结果集中的行转换为由嵌套对象组成的 JavaBeans。 关于我发现的极少数示例,我
我一直在尝试了解如何使用结果集中的数据填充 jtable,并发现使用 DBUtils 可能是最简单的方法,但不幸的是它根本不适合我。程序运行,但 jtable 仍然是空的。我不明白我哪里出了问题。我有
我是一名优秀的程序员,十分优秀!