0

我有一个奇怪的问题,使用 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>

任何想法?

4

0 回答 0