我有一个奇怪的问题,使用 spring-jdbc 在 oracle 中按 rowid 更新一行。
问题是一切都很好,但是对于某些 rowid,更新将永远不会完成并且应用程序被冻结。我将 spring 日志级别更改为 DEBUG 以查看发生了什么,但没有什么奇怪的,spring log 与成功更新完全相同。
我尝试在plsql中执行相同的sql,更新执行成功。
spring 版本是 3.1.1.RELEASE oracle 版本是 11.1.0.6.0
dao 中更新方法的主体是:
String sql=
"UPDATE "+schema+".MSG m SET m.STATE="+state+" WHERE ROWID='"+msg.getRowId()+"'";
getJdbcTemplate().update(sql);
豆豆:
<bean id="messageDao" class="com.foo.dao.springjdbc.MessageDaoSpringJdbcImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
jdbc模板:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
数据源:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@${db.ip}:${db.port}:${db.sid}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="validationQuery" value="select 1 from dual"/>
<property name="testOnBorrow" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="5000"/>
<property name="numTestsPerEvictionRun" value="3"/>
<property name="maxActive" value="1"/>
<property name="maxIdle" value="3"/>
</bean>
任何想法?