Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java h2 sql结果显示';clob<;x>';而不是基本字符串_Java_Javafx_H2_Clob - Fatal编程技术网

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

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

我正在学习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
列根据映射到Java
Java.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));
            }


            ...