?StoredProcedure是一個抽象類,必須寫一個子類來繼承它,這個類是用來簡化JDBCTemplate運行存儲過程操作的。
首先我們寫一個實現類:
package com.huaye.framework.dao;
import java.sql.Types;
import java.util.HashMap;
import java.util.Map;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.SqlReturnResultSet;
import org.springframework.jdbc.object.StoredProcedure;
/**
* Name:StoredProcedureTemplate User: HP Date: 2007-7-21 Time: 7:40:01
* Description:
*/
public class StoredProcedureTemplate extends StoredProcedure {
private HashMap<String, Object> map = new HashMap<String, Object>();
public StoredProcedureTemplate() {
super();
}
public HashMap getMap()
{
return this.map;
}
public void setValue(String key, Object obj) {
map.put(key, obj);
}
public Map execute() {
if (this.getSql() == null || this.getSql().equals(""))
return null;
this.compile();
return execute(map);
}
public void setVarcharParam(String param) {
this.declareParameter(new SqlParameter(param, Types.VARCHAR));
}
public void setDoubleParam(String param) {
this.declareParameter(new SqlParameter(param, Types.DOUBLE));
}
public void setIntegerParam(String param) {
this.declareParameter(new SqlParameter(param, Types.INTEGER));
}
public void setVarcharOutParam(String param) {
this.declareParameter(new SqlOutParameter(param, Types.VARCHAR));
}
public void setDoubleOutParam(String param) {
this.declareParameter(new SqlOutParameter(param, Types.DOUBLE));
}
public void setIntegerOutParam(String param) {
this.declareParameter(new SqlOutParameter(param, Types.INTEGER));
}
public void setInParam(String param,int valueType)
{
this.declareParameter(new SqlParameter(param, valueType));
}
public void setOutParam(String param,int valueType)
{
this.declareParameter(new SqlOutParameter(param, valueType));
}
public void setReturnParam(String param, RowMapper rowMapper) {
this.declareParameter(new SqlReturnResultSet(param,rowMapper));
}
}
寫一個測試:
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath:spring/applicationContext-base.xml");
JdbcTemplate jdbc = (JdbcTemplate) context.getBean("jdbcTemplate");
StoredProcedureTemplate template = new StoredProcedureTemplate();
template.setJdbcTemplate(jdbc);
template.setSql("testproc");
//注意有返回結果集的時候,第一個參數必須設置為返回結果集參數,不然會報錯。
template.setReturnParam("rows", new FirstReportRowMapper());
template.setIntegerParam("@parama");
template.setValue("@parama", 9);
Map map = template.execute();
Object o = map.get("rows");
List<FirstReportVO> list = (List<FirstReportVO>)o;
for (FirstReportVO vo : list) {
System.out.println(vo.getSortID()+","+vo.getSortName());
}
}
唯一要注意的地方就是測試里備注的地方,我測試了好久才發現,郁悶的一塌糊涂,老是莫名其妙的錯,原來將參數互換一下位置就OK了,比方你把
template.setIntegerParam("@parama");寫在前面然后再寫template.setReturnParam("rows", new FirstReportRowMapper());的話,就會報空指針錯誤。
這個“rows”能夠隨便取名字,只是以下map.get("rows")要和你取的名字一致,由于StoredProcedureTemplate會將結果集以這個名字保存在map中返回。
還有要注意的就是設置sqlparamter的順序要和存儲過程中參數的順序要一致,不然也會報錯.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

