我正在学习 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/