Spring-JdbcTemplate执行存储过程

来源:互联网 发布:白自在和谢烟客知乎 编辑:程序博客网 时间:2024/05/15 23:47

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)方法中执行相应的存储过程

0 0
原创粉丝点击