【发布时间】:2012-02-23 10:47:38
【问题描述】:
我们使用的是Spring 2.6,我们在系统中使用jdbcTemplate以及NamedparameterJdbcTemplate,配置如下。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
<property name="fetchSize" value="500>
</bean>
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
虽然 jdbcTemplate 有一个属性“fetchSize”,但 namedParameterJdbcTemplate 没有。我想为此设置fetchSize,所以我想出了另一个接受“jdbcTemplate”的namedParameterJdbcTemplate的构造函数,所以我将我的bean配置为使用已经为jdbcTemplate配置的500的fetchSize:
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="jdbcTemplate"></constructor-arg>
</bean>
但在此之后,我得到以下几个查询的异常:
com.sybase.jdbc3.jdbc.SybSQLException:游标“jconnect_implicit_16”是用 FOR UPDATE 子句声明的。发现此游标是只读的。
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:121)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:322)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:582)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:616)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:641)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:657)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:123)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:127)
有人可以建议它的解决方案吗?
【问题讨论】:
-
您能否添加一个失败查询的示例?
-
嗨 Tomas,其中一个查询是:SELECT TCRT.assessment_id,TCRT.asset_id,ROUND (TCRT.rcrt_value,0) as rcrt_value,ra_rcrt_codes.rcrt_name,ra_rcrt_codes.rcrt_short_desc,ra_rcrt_codes.rcrt_long_desc FROM ra_assess_rcrt_values TCRT 内部连接 ra_rcrt_codes 在 TCRT.rcrt_id = ra_rcrt_codes.rcrt_id 和 TCRT.active = 1 和 ra_rcrt_codes.rcrt_name 不像 'TAM%' 和 ra_rcrt_codes.active = 1 和 TCRT.asset_id In (:appId1)。我想这可能是我正在使用的 ROUND 函数的问题。因为普通查询工作正常。
-
我找到了一种解决方法,方法是在我的中断查询中添加“只读”。但我不想应用这种机制作为查找查询并纠正它们的大要求。有人可以建议任何其他解决方法吗?
标签: java