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
}
}
}
总结
通过jdbcTemplate中的 execute方法,里面接收一个ConnectionCallback 接口,实现在ConnectionCallback接口,在并在此接口的doInConnection(Connection a)方法中执行相应的存储过程