将 CLOB 转换为 String 会删除所有换行符

Pra*_*ash 1 java string clob h2 java-11

我有一个启用了 AES 加密的 H2 数据库。它有一个 CLOB 类型的列。该列包含带有换行符的长文本(有时)。当我在 H2 控制台中检查表格时,我得到所有插入新行的输出,但是当我查询表格时,没有新行字符。我正在使用此代码将 CLOB 对象转换为 String 对象:

public 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 | IOException e) {
        e.printStackTrace();
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

我觉得这里有事。有没有其他有效的方法来进行这种 CLOB 到字符串的转换。

And*_*eas 5

要从数据库中StringCLOB列中获取值,请使用以下方法之一:

当然,所有三个都假设文本适合 a String,即它少于大约 21 亿个字符,或者只有大约 10 亿个字符,这取决于 Java 版本和使用的字符(非拉丁语 1)。

  • 当你有一个 Reader 时,你最好使用 StringWriter sw = new StringWriter(); reader.transferTo(sw); 文本= sw.toString();`。顺便说一句,在 Java 9+ 中,当字符串包含 ISO-LATIN-1 中无法表示的字符时,长度限制要低得多。 (2认同)