最近把一个基于mysql的功能改为基于oracle中,出现了字符过长(ORA-07104:字符串文字太长)的错误。
如果直接以平常sql语句来插入我们的文本,文本内容不能超过4000个字符:
update sp_type set sp_html = '文本内容'
mysql的longtext就相当于oracle的clob,但oracle存储修改方式有点不一样,具体如下:
StringBuilder sb = new StringBuilder();
sb.append("update sp_type ");
sb.append(" set SP_HTML =? ");
sb.append(" where SP_ID = ? ");
System.out.println(sb.toString());
final LobHandler lobHandler = new DefaultLobHandler();
getJdbcTemplate().execute( sb.toString(), new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException {
lobCreator.setClobAsCharacterStream(ps, 1, new StringReader(html), html.length());
ps.setString(2, sp_id);
}
});
}
在实现用发现有两个修改的clob的字段时,会导致修改的值相反了。我也不知道为什么,然后就写了两个方法,分开修改。在寻找这个问题的时候,想要知道具体的sql语句,觉得太麻烦了不值得就没做。