Java 从字符串到Clob和Clob到字符串的转换

Java 从字符串到Clob和Clob到字符串的转换,java,sql,string,clob,Java,Sql,String,Clob,我试图保存XML响应,它作为StringBuffer提供给方法。 我需要将这个字符串数据作为CLOB保存到Sql中,并检索相同的数据 响应最高可达3-4Kb,应再次检索到StringBuffer 有谁能给我一个不包含db特定方法/JAR的教程或示例代码吗 如果CLOB不合适或其他更好的选择,我可以更改db列类型 请建议。您可以通过调用connection.createClob()来创建CLOB,然后可以使用setString、setCharacterStream或setAscistream等方法

我试图保存XML响应,它作为StringBuffer提供给方法。 我需要将这个字符串数据作为CLOB保存到Sql中,并检索相同的数据

响应最高可达3-4Kb,应再次检索到StringBuffer

有谁能给我一个不包含db特定方法/JAR的教程或示例代码吗

如果CLOB不合适或其他更好的选择,我可以更改db列类型


请建议。

您可以通过调用
connection.createClob()
来创建
CLOB
,然后可以使用
setString
setCharacterStream
setAscistream
等方法填充它

创建一个
PreparedStatement
并调用它的
setClob()
将CLOB存储在数据库中


检索数据是一样的,从
ResultSet
中读取数据,并在其上调用
getCharacterStream
getascistream
getSubStream

对于
namedParameterjdbTemplate

MapSqlParameterSource paramSource = new MapSqlParameterSource();
paramSource.addValue("clob", "a long long text", Types.CLOB);
namedTemplate.update(INSERT_STMT, paramSource);
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
    <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
对于
JdbcTemplate

MapSqlParameterSource paramSource = new MapSqlParameterSource();
paramSource.addValue("clob", "a long long text", Types.CLOB);
namedTemplate.update(INSERT_STMT, paramSource);
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
    <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
要从
ResultSet
中提取字符串,请执行以下操作:

 inc.setDetail(lobHandler.getClobAsString(rs, "DETAIL"));

查看官方文档:

我认为对于小字符串,您可以只获取string/setString,就像VARCHAR2一样,驱动程序会处理它。如果字符串较大,则会变得凌乱。但是3~4KB应该可以(4000字节是第一个障碍)。首先,除非您需要同步,否则最好使用StringBuilder,它不是同步的,并且比StringBuffer快得多。第二,您正在处理哪个数据库?@alfasin:考虑到涉及数据库,StringBuffer和StringBuilder之间的差异可能完全不重要。当然,无论如何使用StringBuilder都是值得的——但我们不要过分强调性能优势。@JonSkeet当然你是对的(关于I/O要昂贵得多):)这就是为什么我说“更好的实践”而不是“你应该”。此外,我相信今天的中间层技术(如hibernate)足够“智能”来缓存最近使用的数据。我使用Spring JDBC进行JDBC操作。然后使用
PreparedStatementCallback
PreparedStatementCreator