Java h2 sql 结果显示 'clob<x>' 而不是基本字符串

标签 java javafx h2 clob

我正在学习 Java 并通过使用 javafx 构建应用程序进行练习。

到目前为止一切顺利,除了我遇到了这个非常烦人的问题。搜索结果的格式如下:

{META_KEYWORDS=、META_DESCRIPTION=、CREATED=2015-08-30 14:38:34.284、PUBLISHED=true、PRICE=15.0、DESCRIPTION=clob6:“测试”、TITLE=测试、 ID=26,SLUG=,EXTENDED_DESCRIPTION=clob7:''}

clob 正在破坏我的输出:D

因此 setDescription(row.get("DESCRIPTION").toString()); 渲染 clob6: 'test'

我看不出发生这种情况的任何原因,除了我插入的这段代码可能会产生一些中间干扰,该代码通常会简化结果集:

public List resultSetToArrayList(ResultSet rs) throws SQLException {
    ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    ArrayList list = new ArrayList();
    while (rs.next()) {
        HashMap row = new HashMap(columns);
        for (int i = 1; i <= columns; ++i) {
            row.put(md.getColumnName(i), rs.getObject(i));
        }
        list.add(row);
    }
    return list;
}

也许上面的内容无关紧要,但我无法想象管道中的任何其他内容会导致这种奇怪的 clob 文本添加。

我应该以某种特定的方式处理 clob 以避免这种情况吗?我正在制作一个博客程序,这似乎是最好的使用领域。

最佳答案

显示似乎表明您的列被定义为类型 CLOB .

CLOB列,根据h2's documentation ,映射到 Java java.sql.Clob类型。

使用toString()对于该类型与获取列的完整字符串内容不同。 Clob是一个介于您和列之间的对象,允许您检索内容而不将其全部保存在内存中。 toString()合约要求返回一个简短的、人类可读的对象表示,并且通常在实现时考虑到日志记录和调试。在这种情况下,除了内容之外,对象还显示一些列标识。

因此,获取 CLOB 内容的正确方法,不是它的“描述”,是使用 java.sql.Clob 的方法之一类型。鉴于CLOB用于长文本,可能适合使用它提供的流之一,或者如果您知道文本很短,请使用 getSubstring .

但是,如果数据应该是相对较短的文本,并且您可以控制表格,请使用 VARCHAR 作为列类型,因为此类型映射到 java.lang.String ,因此您只会获得内容。

关于Java h2 sql 结果显示 'clob<x>' 而不是基本字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32306795/

相关文章:

java - Spring 数据 Redis NoSuchBeanDefinitionException : No qualifying bean of type

java - 如何检测vaadin TextArea中的回车键按下

JavaFX查看: Is there a difference between add and setConstraints?

java - Firebase 身份验证不适用于 Java(jvm)(桌面)

sql - SELECT * FROM table WHERE field IN(array) - H2 数据库

java - 内存数据库H2中的Spring Boot不会在初始化时从文件加载数据

java - 在 § 之前附加一个特殊字符

java - 以通用方式处理 JSON 响应

JavaFX 在 3D 中标记轴