在Java中,将CLOB转换为字符串和字符串转换为CLOB的最有效解决方案是什么?

58
我有一个大的CLOB(超过32KB),我想使用StringBuilder将其读取到字符串中。最有效的方法是什么?由于我的CLOB长度超过“int”,需要“long”值,因此无法使用StringBuilder的“int length”构造函数。
我对Java I/O类不太熟悉,希望能得到一些指导。 编辑 - 我已经尝试了这个clobToString()代码:
private String clobToString(Clob data) {
    StringBuilder sb = new StringBuilder();
    try {
        Reader reader = data.getCharacterStream();
        BufferedReader br = new BufferedReader(reader);

        String line;
        while(null != (line = br.readLine())) {
            sb.append(line);
        }
        br.close();
    } catch (SQLException e) {
        // handle this exception
    } catch (IOException e) {
        // handle this exception
    }
    return sb.toString();
}

你是指数据库中的 CLOB,还是仅仅指“大字符串”? - skaffman
是的,它是来自DB2数据库的CLOB。 - Jonas
2
我想知道Java NIO中是否有任何有用的类可以实现这个功能。 - Jonas
不,还没有,但我有一种感觉,知道可能会遇到什么问题,所以我会进行更多的测试。在这里得到了很好的建议,谢谢。 - Jonas
超过32KB - 你是指32位吗? - Stefan Reich
显示剩余4条评论
12个回答

0
 public static String clobToString(final Clob clob) throws SQLException, IOException {
        try (final Reader reader = clob.getCharacterStream()) {
            try (final StringWriter stringWriter = new StringWriter()) {
                IOUtils.copy(reader, stringWriter);
                return stringWriter.toString();
            }
        }
    }

-2

CLOB 就像文件一样,您可以轻松地按照以下方式读取其中的部分内容

// read the first 1024 characters
String str = myClob.getSubString(0, 1024);

你可以像这样覆盖它

// overwrite first 1024 chars with first 1024 chars in str
myClob.setString(0, str,0,1024);

我不建议使用StringBuilder并填充它,直到你得到一个异常,这几乎就像盲目地添加数字,直到你得到一个溢出。Clob就像一个文本文件,最好的读取方式是使用缓冲区,在处理它时需要这样做,否则你可以像这样将其流式传输到本地文件中。

int s = 0;
File f = new File("out.txt");
FileWriter fw new FileWriter(f);

while (s < myClob.length())
{
    fw.write(myClob.getSubString(0, 1024));
    s += 1024;
}

fw.flush();
fw.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接