急呀,clob保存数据的问题
小弟的代码:
public void save(final Lob lob) {
final String keyId = super.generateId(lob);
String sql = " INSERT INTO ta_lob(id,foreignid,type,content,contentall)"
+ " VALUES(?,?,?,?,?)";
jdbcTemplate.execute(sql,
new AbstractLobCreatingPreparedStatementCallback(
lobHandler) {
protected void setValues(PreparedStatement ps,
LobCreator lobCreator) throws SQLException{
ps.setString(1, keyId);
ps.setString(2, lob.getForeignId());
ps.setString(3, lob.getType());
lobCreator.setClobAsString(ps, 4, lob.getContent());
lobCreator.setClobAsString(ps, 5, lob.getContentAll());
}
});
}
配置文件:
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"
lazy-init="true" />
<bean id="oracleLobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" />
</bean>
错误信息:
org.springframework.dao.DataAccessResourceFailureException: Could not create Oracle LOB; nested exception is java.lang.AbstractMethodError
Caused by: java.lang.AbstractMethodError
at oracle.jdbc.driver.OracleConnection.unwrapCompletely(OracleConnection.java:5149)
at oracle.jdbc.driver.OracleConnection.physicalConnectionWithin(OracleConnection.java:5198)
at oracle.sql.CLOB.createTemporary(CLOB.java:1009)
at oracle.sql.CLOB.createTemporary(CLOB.java:956)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.prepareLob(OracleLobHandler.java:393)
at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:340)
at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.setClobAsString(OracleLobHandler.java:265)
at com.dhcc.ta.dao.LobDao$1.setValues(LobDao.java:44)
at org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback.doInPreparedStatement(AbstractLobCreatingPreparedStatementCallback.java:70)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:538)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:566)
at com.dhcc.ta.dao.LobDao.save(LobDao.java:36)
at com.dhcc.ta.service.LobService.save(LobService.java:17)
at com.dhcc.ta.service.LobService$$FastClassByCGLIB$$452e3693.invoke()
at net.sf.cglib.proxy...
我的是9i的数据库,读取clob没有问题,就是插入的时候包错,驱动包是ojdbc14.jar(1.1M)9i的驱动包
并且发现如果换成是ojdbc14.jar(1.5M)10g的驱动包就没问题,但是10g的驱动包有会对我的其它代码造成影响(时间无法显示时分秒),郁闷呀