Spring-JdbcTemplate執行存儲過程
1先創建 JDBCTEMPLATE
package com.test;
import org.springframework.jdbc.core.JdbcTemplate;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class ConfigC3po {
//生成jdbcTemplate對象
private static JdbcTemplate jdbc;
/***
* 返回JDBCTEMPLATE對象
* @return
*/
public static JdbcTemplate getJdbc(){
if(jdbc==null){
//生成C3PO連接池
ComboPooledDataSource data = new ComboPooledDataSource();
//設置最大連接數
data.setMaxPoolSize(5);
//設置最小連接數
data.setMinPoolSize(2);
try {
//設置驅動
data.setDriverClass("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//設置連接用戶
data.setUser("sa");
//設置連接密碼`
data.setPassword("");
//設置連接字符串
data.setJdbcUrl("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs");
} catch (Exception e) {
// TODO: handle exception
}
//生成JDBCTEMPLATE對象
jdbc = new JdbcTemplate(data);
}
return jdbc;
}
}
2 定義一個類 實現 ConnectionCallback接口
package com.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.ConnectionCallback;
import com.hygj.show.share.CoreAccess;
public class Dispose implements ConnectionCallback {
//要執行的存儲過程
private String call;
//構造函數 接收要執行的存儲過程
public Dispose(String call){
this.call = call;
}
public static void main(String[] args) {
CoreAccess core = CreateConn.getCore();
List list = core.queryForList("select * from jobs",Bean.class);
Object obj = core.getJdbc().execute(new ConnectionCallback(){
public Object doInConnection(Connection arg0) throws SQLException, DataAccessException {
CallableStatement call = arg0.prepareCall("{call up_call}");
System.out.println(arg0);
ResultSet rs = call.executeQuery();
System.out.println(rs);
while(rs.next()){
System.out.println(rs.getMetaData().getColumnName(1));
System.out.println(rs.getString(1));
}
return null;
}
});
System.out.println(obj);
}
/**
* 將查尋到數據封裝爲一個ArrayList
* 裏面存儲着列名:值的集合
*/
public Object doInConnection(Connection arg0) throws SQLException, DataAccessException {
//生成執行存儲過程類
CallableStatement able = arg0.prepareCall(call);
//執行存儲過程
ResultSet rs = able.executeQuery();
//定義容器存數據
List list = new ArrayList();
//遍歷所有數據
while(rs.next()){
//定義MAP 存儲名稱與值的集合
Map map = new HashMap();
//把所有列名與值的集合存入MAP中
for(int i = 1; i<=rs.getMetaData().getColumnCount(); i++){
map.put(rs.getMetaData().getColumnName(i),rs.getObject(i));
}
list.add(map);
}
//返回查尋到的所有數據
return list;
}
}
3 調動存儲過程
package com.test;
import java.util.List;
public class Display {
public static void main(String[] args) {
List list = (List)ConfigC3po.getJdbc().execute(new Dispose("{call up_call}"));
for(int i = 0; i<list.size(); i++){
System.out.println(list.get(i));
}
}
}
總結
通過jdbcTemplate中的 execute方法,裏面接收一個ConnectionCallback 接口,實現在ConnectionCallback接口,在並在此接口的doInConnection(Connection a)方法中執行相應的存儲過程