gpt4 book ai didi

java.sql.SQLRecoverableException : 10 char of CLOB data cannot be read

转载 作者:行者123 更新时间:2023-12-01 04:34:44 25 4
gpt4 key购买 nike

我正在尝试将 xml 文件保存到数据库,但是当我尝试为 CallableStatement 设置 CLOB 时,出现此异常:

java.sql.SQLRecoverableException: 10 char of CLOB data cannot be read

当我在 Notepad++ 中查看显示所有符号的文件时,我没有看到任何特殊字符。数据库的编码是AL32UTF8。我怎样才能找到这10个无法读取的字符?它绝对不是人们想象的第 10 个字符,因为文件中的第 10 个字符是“s”。第一个字符串:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

代码片段:

CallableStatement cs = con.prepareCall("{ call scenario.add(?,?,?,?,?) }");
cs.registerOutParameter(1, Types.INTEGER);
cs.setLong(2, cfg.getScenarioId());
cs.setString(3, cfg.getType());
cs.setClob(4, new InputStreamReader(new FileInputStream(file), "UTF-8"), (int) file.length());
cs.setString(5, cfg.getFileName());

应用程序在 setClob 上崩溃(如果使用 setCharacterStream() 也会发生同样的情况)。

最佳答案

嗯,我已经找到解决方案了。我仍然不明白 CLOB 有什么问题,但所有数据都完美地保存为对象。我使用这个函数来获取文件内容:

private String getContent(File file) throws IOException {
StringWriter writer = new StringWriter();
IOUtils.copy(new FileInputStream(file), writer, "UTF-8");
String result = writer.toString();
return result;
}

然后将结果字符串保存为对象:

CallableStatement cs = con.prepareCall("{ call scenario.add(?,?,?,?,?) }");
cs.registerOutParameter(1, Types.INTEGER);
cs.setLong(2, cfg.getScenarioId());
cs.setString(3, cfg.getType());
String fileContent = getContent(file);
cs.setObject(4, fileContent);
cs.setString(5, cfg.getFileName());

而且它有效!

关于java.sql.SQLRecoverableException : 10 char of CLOB data cannot be read,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17490979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com