9

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>

procedureproc1接收 2 个参数,adn procedureproc2接收 1 个参数。

当我运行它时,发生了异常。

然后我调试发现AbstractJdbcCall.callString仍然是 CallString: {call proc1(?, ?)} when call proc2

那么,这是Spring的错误吗?

有没有人告诉我如何联系作者 Thomas Risberg ?

4

2 回答 2

21

那么,这是Spring的错误吗?

不,你只是使用不正确。文档_SimpleJdbcCall可能更明确,但它确实说:

ASimpleJdbcCall是一个多线程、可重用的对象,表示对调用

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

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

于 2011-07-06T08:14:09.037 回答
0

这个概念在 spring 参考文档中似乎不是很清楚,因为那里的所有示例只有一个 SimpleJdbcCall 实例,它用于一个示例过程。

每个唯一存储过程需要一个 SimpleJdbcCall 实例,并且 SimpleJdbcCall 实例只需初始化一次。一旦初始化,它们就是线程安全的。

于 2013-03-22T21:12:50.030 回答