Spring-JdbcTemplate執行存儲過程

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)方法中執行相應的存儲過程


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章