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个参数。当我运行它时,发生了异常。
然后我调试并发现
AbstractJdbcCall.callString
仍然CallString:
{call proc1(?, ?)}
当调用proc2
时。那么,这是Spring的bug吗?
还有没有人告诉我如何联系作者Thomas Risberg?
最佳答案
那么,这是Spring的bug吗?
不,您只是在错误地使用它。 SimpleJdbcCall
的documentation可能更明确,但它确实说:
SimpleJdbcCall
是一个多线程可重用对象,表示对,存储过程或存储函数的调用。
换句话说,SimpleJdbcCall
的每个实例都配置为调用特定的存储过程。一旦配置,就不应更改。
如果需要调用多个存储过程,则需要具有多个SimpleJdbcCall
对象。