SimpleJdbcCall不能调用多个过程
这是我的测试代码:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
public class TestCall {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "spring/applicationContext.xml",
"spring/applicationDb.xml" });
SimpleJdbcCall call = context.getBean("simpleJdbcCall",
SimpleJdbcCall.class);
call.withProcedureName("proc1").execute("p1", "p2");
System.out.println("CallString: " + call.getCallString());
call.withProcedureName("proc2").execute("p1");
System.out.println("CallString: " + call.getCallString());
}
}在代码中,我定义了simpleJdbcCall
<bean id="simpleJdbcCall" class="org.springframework.jdbc.core.simple.SimpleJdbcCall" >
<constructor-arg ref="dataSource" />
</bean>过程proc1接收2个参数,过程proc2接收1个参数。
当我运行它的时候,发生了异常。
然后我进行了调试,当调用proc2时,AbstractJdbcCall.callString仍然是CallString:{call proc1(?, ?)}。
那么,它是Spring的bug吗?
有没有人能告诉我怎么联系作者Thomas Risberg?
发布于 2011-07-06 16:14:09
那么,这是一个
的bug吗?
不,你只是在错误地使用它。SimpleJdbcCall的documentation可能会更明确,但它确实说明了:
SimpleJdbcCall是一个多线程的、可重用的对象,表示对存储过程或存储函数的调用。
换句话说,SimpleJdbcCall的每个实例都被配置为调用一个特定的存储过程。一旦配置好,它就不应该被改变。
如果需要调用多个存储过程,则需要有多个SimpleJdbcCall对象。
发布于 2013-03-23 05:12:50
这个概念在spring参考文档中似乎不是很清楚,因为其中的所有示例都只有一个SimpleJdbcCall实例,该实例用于一个示例过程。
每个唯一的存储过程需要一个SimpleJdbcCall实例,并且SimpleJdbcCall实例只需要初始化一次。一旦初始化,它们就是线程安全的。
https://stackoverflow.com/questions/6592814
复制相似问题