gpt4 book ai didi

java - NamedParameterJdbcTemplate 设置连接获取大小属性

转载 作者:行者123 更新时间:2023-12-04 05:56:50 27 4
gpt4 key购买 nike

我们使用的是 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 以使用 500 的 fetchSize,它已经为 jdbcTemplate 配置了:
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="jdbcTemplate"></constructor-arg>
</bean>

但在此之后,我收到以下几个查询的异常(exception)情况:

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)

有人可以建议它的解决方案吗?

最佳答案

不幸的是,上述解决方法有奇怪的副作用。

使用 JdbcTemplate.query(...) 执行有时会导致 0 行的选择,现在抛出异常

引起:java.sql.SQLException:JZ0R2:此查询没有结果集。

另一个在 Google 上几乎没有结果的晦涩问题(也没有有用的结果)。

我现在正在使用创建 StreamingStatementCreator 的解决方案,如对这个问题的回答 How to manage a large dataset using Spring MySQL and RowCallbackHandler 中所述

这将创建一个设置了 ResultSet.CONCUR_READ_ONLY 的 Statement,但您仍然可以使用 JdbcTemplate,而不是恢复到 Connections、Statement 和 ResultSets。

关于java - NamedParameterJdbcTemplate 设置连接获取大小属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411493/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com