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吗?

不,您只是在错误地使用它。 SimpleJdbcCalldocumentation可能更明确,但它确实说:

SimpleJdbcCall是一个多线程可重用对象,表示对存储过程或存储函数的调用。

换句话说,SimpleJdbcCall的每个实例都配置为调用特定的存储过程。一旦配置,就不应更改。

如果需要调用多个存储过程,则需要具有多个SimpleJdbcCall对象。

08-04 09:26