微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

spring 中StoredProcedure的用法--转载

 StoredProcedure是一个抽象类,必须写一个子类来继承它,这个类是用来简化JDBCTemplate执行存储过程操作的。

首先我们写一个实现类:

<span style="color: #0000ff;">import<span style="color: #000000;"> java.sql.Types;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.util.HashMap;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.util.Map;

<span style="color: #0000ff;">import<span style="color: #000000;"> org.springframework.jdbc.core.RowMapper;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.springframework.jdbc.core.sqlOutParameter;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.springframework.jdbc.core.sqlParameter;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.springframework.jdbc.core.sqlReturnResultSet;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.springframework.jdbc.object.StoredProcedure;

<span style="color: #008000;">/**<span style="color: #008000;">

  • Name:StoredProcedureTemplate User: HP Date: 2007-7-21 Time: 7:40:01

  • Description:
    <span style="color: #008000;">*/
    <span style="color: #0000ff;">public <span style="color: #0000ff;">class StoredProcedureTemplate <span style="color: #0000ff;">extends<span style="color: #000000;"> StoredProcedure {

    <span style="color: #0000ff;">private HashMap<String,Object> map = <span style="color: #0000ff;">new HashMap<String,Object><span style="color: #000000;">();

    <span style="color: #0000ff;">public<span style="color: #000000;"> StoredProcedureTemplate() {
    <span style="color: #0000ff;">super<span style="color: #000000;">();

    }

    <span style="color: #0000ff;">public<span style="color: #000000;"> HashMap getMap()
    {
    <span style="color: #0000ff;">return <span style="color: #0000ff;">this<span style="color: #000000;">.map;
    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> setValue(String key,Object obj) {
    map.put(key,obj);
    }

    <span style="color: #0000ff;">public<span style="color: #000000;"> Map execute() {
    <span style="color: #0000ff;">if (<span style="color: #0000ff;">this.getsql() == <span style="color: #0000ff;">null || <span style="color: #0000ff;">this.getsql().equals(""<span style="color: #000000;">))
    <span style="color: #0000ff;">return <span style="color: #0000ff;">null<span style="color: #000000;">;
    <span style="color: #0000ff;">this<span style="color: #000000;">.compile();
    <span style="color: #0000ff;">return<span style="color: #000000;"> execute(map);
    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> setvarcharParam(String param) {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlParameter(param,Types.VARCHAR));
    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> setDoubleParam(String param) {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlParameter(param,Types.DOUBLE));
    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> setIntegerParam(String param) {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlParameter(param,Types.INTEGER));
    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> setvarcharOutParam(String param) {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlOutParameter(param,Types.VARCHAR));
    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> setDoubleOutParam(String param) {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlOutParameter(param,Types.DOUBLE));
    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> setIntegerOutParam(String param) {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlOutParameter(param,Types.INTEGER));
    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void setInParam(String param,<span style="color: #0000ff;">int<span style="color: #000000;"> valueType)
    {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlParameter(param,valueType));

    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void setoutParam(String param,<span style="color: #0000ff;">int<span style="color: #000000;"> valueType)
    {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlOutParameter(param,valueType));

    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> setReturnParam(String param,RowMapper rowMapper) {
    <span style="color: #0000ff;">this.declareParameter(<span style="color: #0000ff;">new<span style="color: #000000;"> sqlReturnResultSet(param,rowMapper));
    }

}

一个测试:

= sspathXmlApplicationContext( "classpath:spring/applicationContext-base.xml"= (JdbcTemplate) context.getBean("jdbcTemplate" StoredProcedureTemplate template </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; StoredProcedureTemplate(); template.setJdbcTemplate(jdbc); template.set<a href="/tag/sql/" target="_blank" class="keywords">sql</a>(</span>"testproc"<span style="color: #000000;"&gt;); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;注意有返回结果集的时候,第<a href="/tag/yige/" target="_blank" class="keywords">一个</a>参数必须设置为返回结果集参数,不然会报错。</span> template.setReturnP<a href="/tag/ara/" target="_blank" class="keywords">ara</a>m("rows",<span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; F<a href="/tag/irs/" target="_blank" class="keywords">irs</a>tReportRowMapper()); template.setIntegerP<a href="/tag/ara/" target="_blank" class="keywords">ara</a>m(</span>"@p<a href="/tag/ara/" target="_blank" class="keywords">ara</a>ma"<span style="color: #000000;"&gt;); template.setValue(</span>"@p<a href="/tag/ara/" target="_blank" class="keywords">ara</a>ma",9<span style="color: #000000;"&gt;); Map map </span>=<span style="color: #000000;"&gt; template.execute(); Object o </span>= map.get("rows"<span style="color: #000000;"&gt;); List</span><FirstReportVO> list = (List<FirstReportVO><span style="color: #000000;"&gt;)o; </span><span style="color: #0000ff;"&gt;for</span><span style="color: #000000;"&gt; (F<a href="/tag/irs/" target="_blank" class="keywords">irs</a>tReportVO vo : list) { Sy<a href="/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(vo.getSortID()</span>+","+<span style="color: #000000;"&gt;vo.getSortName()); } }</span></pre>

唯一要注意的地方就是测试里备注的地方,我测试了好久才发现,郁闷的一塌糊涂,老是莫名其妙的错,原来将参数互换一下位置就OK了,比如你把

template.setIntegerParam("@parama");写在前面然后再写template.setReturnParam("rows",new FirstReportRowMapper());的话,就会报空指针错误

这个“rows”可以随便取名字,不过下面map.get("rows")要和你取的名字一致,因为StoredProcedureTemplate会将结果集以这个名字保存在map中返回。

还有要注意的就是设置sqlparamter的顺序要和存储过程中参数的顺序要一致,不然也会报错.

原文:http://blog.csdn.net/xiao_jun_0820/article/details/7268219

 http://forum.spring.io/forum/spring-projects/data/13984-multiple-calls-to-storedprocedure-using-same-connection

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐