Java h2 sql结果显示';clob<;x>';而不是基本字符串
我正在学习java,并通过使用javafx构建应用程序进行实践 到目前为止还不错,只是我有一个非常恼人的问题。搜索结果的格式如下: {META_KEYWORDS=,META_DESCRIPTION=,CREATED=2015-08-30 14:38:34.284,PUBLISHED=true,PRICE=15.0,DESCRIPTION=clob6:'test',TITLE=test,ID=26,SLUG=,EXTENDED_DESCRIPTION=clob7:' clob正在破坏我的输出:D 因此Java h2 sql结果显示';clob<;x>';而不是基本字符串,java,javafx,h2,clob,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:'test',TITLE=test,ID=26,SLUG=,EXTENDED_DESCRIPTION=clob7:' clob正在破坏我的输出:D
setDescription(row.get(“DESCRIPTION”).toString()代码>渲染clob6:“测试”
我看不出发生这种情况的任何原因,除了我插入的代码中的一些中间干扰,这些干扰通常简化了结果集:
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;
}
公共列表resultSetToArrayList(ResultSet rs)引发SQLException{
ResultSetMetaData md=rs.getMetaData();
int columns=md.getColumnCount();
ArrayList=新建ArrayList();
while(rs.next()){
HashMap行=新的HashMap(列);
对于(inti=1;i,正如@realponsum所说的,clob必须被唯一地处理--
因此,在我的resultSetToArrayList
方法中,我只需检查clob的一个实例,并获得一个子字符串(等于它的总字符数),然后解决它。显示似乎表明您的列被定义为clob
类型
CLOB
列根据映射到JavaJava.sql.CLOB
类型
对该类型使用toString()
与获取列的完整字符串内容不同。Clob
是一个在您和列之间起中间作用的对象,允许您检索内容而无需将其全部保存在内存中。toString()
contract要求返回一个简短的、人类可读的对象表示形式,通常在实现时会考虑日志记录和调试。在这种情况下,对象除了显示内容外还会显示一些列标识
因此,获取CLOB
的内容而不是“描述”的正确方法是使用该类型的方法之一。鉴于CLOB
用于长文本,可能适合使用它提供的流,或者如果您知道文本较短,则使用getSubstring
但是,如果数据应该是相对较短的文本,并且您可以控制表,那么可以将其用作列类型,因为该类型映射到java.lang.String
,因此您将只获得内容。嗯,我假设列是CLOB类型,而不是VARCHAR类型。因此,这就是您获得的对象类型。因此,您要么更改列到VARCHAR,或者通过java.sql.CLOB
方法之一从CLOB获取数据。要么你是天才,要么我非常无知!(再说一遍,这都是相对的,不是吗!)这就是解决方案,谢谢。
...
if(rs.getObject(i) instanceof org.h2.jdbc.JdbcClob){
Clob clob = rs.getClob(i);
row.put(md.getColumnName(i), rs.getClob(i).getSubString(1, (int) clob.length()));
} else {
row.put(md.getColumnName(i), rs.getObject(i));
}
...