SPRING JDBC 的使用.

 

package com.just.zb.spring.jdbc;

import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;

public abstract class AbstractExceute {
	 private  JdbcTemplate  template;
     private  DataSource  dataSource;
	public JdbcTemplate getTemplate() {
		return template;
	}
	public void setTemplate(JdbcTemplate template) {
		this.template = template;
	}
	public DataSource getDataSource() {
		return dataSource;
	}
	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}
	
	public abstract void executeSql(String sql, List params) throws Exception;
	public abstract void executeSqls(String []sqls, List<List> params) throws Exception;
	public abstract void executeBatchSql(String sql, List<List> params) throws Exception;
	public abstract int getAllCount(String sql, List params) throws Exception;
	public abstract List getList(String sql,List params ,Class clazz) throws Exception;
	public abstract List processStoredProcedure(final String procedure ,final Map<Integer , Object> inParams , final  Map<Integer , Integer> outParams ) throws Exception ;
}

 

 

 

实现类:

 

package com.just.zb.spring.jdbc;

import java.lang.reflect.Field;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import org.apache.log4j.Logger;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.CallableStatementCallback;

public class Execute  extends  AbstractExceute{
	protected static Logger log = Logger.getLogger(Execute.class);
	@Override
	public void executeBatchSql(final String sql, final List<List> params)
			throws Exception {
		
		BatchPreparedStatementSetter pss = null;
		pss = new BatchPreparedStatementSetter() {   
            public void setValues(PreparedStatement pstmt, int ord) throws SQLException { 
            	List param = params.get(ord);
                for (int i = 0; i < (null != param ? param.size() : 0); i++) {
    				pstmt.setObject(i + 1, param.get(i));
    			}
            }   
            public int getBatchSize() {   
                return 3;   
            }   
        };  
        getTemplate().batchUpdate(sql, pss);
	}

	@Override
	public void executeSql(String sql, List params) throws Exception {
		   getTemplate().update(sql,  params.toArray());
	}

	@Override
	public void executeSqls(String []sqls, List<List> params) throws Exception {
		for(int i=0;i<sqls.length;i++){
			getTemplate().update(sqls[i],  ((List)params.get(i)).toArray());
		}
	}

	@Override
	public int getAllCount(String sql, List params) throws Exception {
		  return getTemplate().queryForInt(sql,params.toArray());
		
	}

	@Override
	public List getList(String sql, List params, Class clazz) throws Exception {
		List list = getTemplate().queryForList(sql, params.toArray());
		return list;
	}
	
	
	public List processStoredProcedure(final String procedure ,final Map<Integer , Object> inParams ,  final  Map<Integer , Integer> outParams ) throws Exception {
        CallableStatementCallback cb = new CallableStatementCallback() {
            public Object doInCallableStatement(CallableStatement cs)
                    throws SQLException {
            	Set  outSet = null;
            	if(outParams != null && outParams.size()!= 0){
            		   outSet = outParams.entrySet();
            		for (Iterator iter = outSet.iterator(); iter.hasNext();) {
                		Entry<Integer , Integer> entry = (Entry <Integer , Integer>)iter.next();
                		 cs.registerOutParameter(entry.getKey(),entry.getValue());
                		 log.info("config one out put paramter , index: "+ entry.getKey() + "  value :" + getTypesString(entry.getValue()));
    				}
            	}
            	
            	if(inParams != null && inParams.size()!= 0){
	            	Set  inSet = inParams.entrySet();
	            	for (Iterator iter = inSet.iterator(); iter.hasNext();) {
	            		Entry<Integer , Object> entry = (Entry <Integer , Object>)iter.next();
	            		 cs.setObject(entry.getKey(),entry.getValue());
	            		 log.info("config one in put paramter , index: "+ entry.getKey() + "  value :" + entry.getValue() );
					}
            	}
            	 cs.execute();
            	 
            	List list = new ArrayList();
            	if(outParams != null && outParams.size()!= 0){
	            	for (Iterator iter = outSet.iterator(); iter.hasNext();) {
	            		Entry<Integer , Integer> entry = (Entry <Integer , Integer>)iter.next();
	            		Object obj = cs.getObject(entry.getKey());
	            		list.add(obj);
	            		log.info("get one out put value , index: "+ entry.getKey() + "  value :" + obj);
					}
            	}
            	return list;
            }
            
        };
        
       return  (List)getTemplate().execute(" "+procedure+" ", cb);
    }
	
	public String getTypesString(int type) {
		Class clazz =	Types.class ; 
		Field [] fields = clazz.getFields();
		for(int i=0; i< fields.length ; i++){
			try {
				if(fields[i].getInt(clazz) == type){
					return fields[i].getName();
				}
			} catch (IllegalArgumentException e) {
			} catch (IllegalAccessException e) {
			}
		}
		return null;
	}
	
	public static void main(String[] args) {
			System.out.println(new Execute().getTypesString(1));
		 
	}
}

 

 

测试类:

 

package com.just.zb.spring.jdbc;


import java.sql.Types;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class TestSpringJDBC implements Runnable{
	private static final Log LOG = LogFactory.getLog(TestSpringJDBC.class);
	private static BeanFactory beans ;
	public Execute getExceuteMgr() {
		return ( Execute ) beans.getBean("execute");
	}

	public void testInsert( ) throws Exception {
		Execute exeMgr = this.getExceuteMgr();
		exeMgr.executeSql("insert into person  values(?,?,?,?,?)", Arrays.asList("testGO",20,1,"test@163.com","ZZ"));
	}
	
	public void testUpdate( ) throws Exception {
		Execute exeMgr = this.getExceuteMgr();
		exeMgr.executeSql("update person  set name =  ? where name like ?" , Arrays.asList("testGOGO","%testGO%"));
	}
	public void testDelete( ) throws Exception {
		Execute exeMgr = this.getExceuteMgr();
		exeMgr.executeSql("DELETE FROM PERSON  where name LIKE ?" , Arrays.asList("%testGO%"));
	}
	
	public void testExcSqls( ) throws Exception {
		Execute exeMgr = this.getExceuteMgr();
		String sqls[ ] = new String[2];
		List<List> params = new ArrayList<List>();
		
		sqls[0] = "update person  set name = ? where name = ?";
		params.add(Arrays.asList("testGOGO","testGO"));
		
		sqls[1] = "insert into person  values(?,?,?,?,?)" ;
		params.add(Arrays.asList("test1",20,1,"test@163.com","ZZ"));
		
		exeMgr.executeSqls(sqls, params);
	}
	
	public void testGetList() throws Exception{
		Execute exeMgr = this.getExceuteMgr();
		List list = exeMgr.getList("SELECT * FROM PERSON", Arrays.asList(), null);
		for(int i=0 ; i<list.size() ; i++){
			Map map =(Map) list.get(i);
			Person p = new Person ();
			RefUtil.map2obj(Person.class, map, p );
			System.out.println(p);
		}
	}
	
	public void testexeProNotParams() throws Exception{
		Execute exeMgr = this.getExceuteMgr();
		Object obj = exeMgr.processStoredProcedure("exec testPro ", new HashMap<Integer, Object>() ,  new HashMap<Integer, Integer>());
		 
		System.out.println(obj);
	}
	
	public void testexeProByOut() throws Exception{
		
		Execute exeMgr = this.getExceuteMgr();
		Map<Integer , Integer> out = new HashMap<Integer, Integer>();
		out.put(1, Types.VARCHAR);
		Object obj = exeMgr.processStoredProcedure("exec testPro1  ?  ", new HashMap<Integer, Object>() ,  out);
		 
		System.out.println(obj);
	}
	
	public void testexeProByOutIn() throws Exception{
		
		Execute exeMgr = this.getExceuteMgr();
		
		Map<Integer , Object> in = new HashMap<Integer, Object>();
		in.put(1, "testOUTParam");
		
		Map<Integer , Integer> out = new HashMap<Integer, Integer>();
		out.put(2, Types.VARCHAR);
		
		List obj = exeMgr.processStoredProcedure(" exec testPro2 ? , ?  ", in ,  out);
		 
		System.out.println(obj);
	}

	public static void test() {
		TestSpringJDBC jdbc = new TestSpringJDBC();
		jdbc.parsexml();
		Execute exeMgr = jdbc.getExceuteMgr();
		try {
			for(int i=0 ;i< 20 ; i++){
				System.out.println(i + "  "+ exeMgr.getList("select * from person", Arrays.asList(), null));
				Thread.sleep(100);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	/*	try {
			jdbc.testUpdate( );
		} catch (Exception e) {
			e.printStackTrace();
		}
		*/
		/*try {
			jdbc.testDelete();
		} catch (Exception e) {
			e.printStackTrace();
		}*/
		
		/*
		try {
			jdbc.testInsert();
		} catch (Exception e) {
			e.printStackTrace();
		}
		*/
		/*try {
			jdbc.testExcSqls();
		} catch (Exception e) {
			e.printStackTrace();
		}*/
		
	/*	try {
			jdbc.testGetList();
		} catch (Exception e) {
			e.printStackTrace();
		}*/
		
		/* try{
			jdbc.testexeProByOutIn();
		}catch(Exception e){
			e.printStackTrace();
		} */
		
	}

	public static void parsexml() {
		Resource resource = new ClassPathResource("springbeans.xml");
		  beans = new XmlBeanFactory(resource);
	}
	
	/**  
     * 此方法可以得到连接池的信息 showSnapshotInfo  
     */   
    private   void showSnapshotInfo() {   
        try {   
            SnapshotIF snapshot = ProxoolFacade.getSnapshot("mssql", true);   
            int curActiveCount = snapshot.getActiveConnectionCount();// 获得活动连接数   
            System.out.println(curActiveCount);
            int availableCount = snapshot.getAvailableConnectionCount();// 获得可得到的连接数   
            int maxCount = snapshot.getMaximumConnectionCount();// 获得总连接数   
            if (curActiveCount != activeCount)// 当活动连接数变化时输出的信息   
            {   
                System.out.println("活动连接数:" + curActiveCount   
                        + "(active)  可得到的连接数:" + availableCount   
                        + "(available)  总连接数:" + maxCount + "(max)");   
                activeCount = curActiveCount;   
            }   
        } catch (ProxoolException e) {   
            e.printStackTrace();   
        }   
    }   
    private static int activeCount = -1;
    public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    private static Date d= new Date(Calendar.getInstance().getTimeInMillis() + 1000*3);
    
	public void run() {
		try {
			//mgr.myWait();
			throw new Exception ("test");
			// this.testInsert();
			// this.testUpdate();
		} catch (Exception e) {
			 LOG.info(" 执行任务,时间:" + sdf.format(new Date()) , e);
			 LOG.error(" 执行任务,时间:" + sdf.format(new Date()) , e);
			e.printStackTrace();
		}
		
		
	}

	 private static ThreadManager mgr = new ThreadManager();
	 
	 public static void main(String[] args) {
		  
		 parsexml();
		
		 LOG.info(" 计划执行时间:" + sdf.format(d));
		  new Thread(){
			 public void run(){
				 while(true){
					 Date c = new Date();
					 if(c.after(d)){
						// mgr.myNotify();
						 break;
					 }
					 try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
				 }
			 }		 
		 }.start();
		 
		 
		 for (int i = 0; i< 10 ; ++i ) {
			
			 TestSpringJDBC jdbc = new TestSpringJDBC();
				new Thread(jdbc).start();
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		} 
		
	}
}
 

 

 

 applicationcontext.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="jdbcTemplate"
		class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg>
<ref bean="datasource" />
</constructor-arg>
</bean>
<bean id="datasource_test"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
			value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url"
			value="jdbc:sqlserver://localhost;databaseName=ICEtest" />
<property name="username" value="sa" />
<property name="password" value="access" />
</bean>
<bean id="datasource"
		class="org.logicalcobwebs.proxool.ProxoolDataSource"
		destroy-method="close">
<property name="driver">
<value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value>
</property>
<property name="driverUrl">
<value>jdbc:sqlserver://localhost:1433;databaseName=ICEtest;user=sa;password=access</value>
</property>
<property name="user">
<value>sa</value>
</property>
<property name="password">
<value>access</value>
</property>
<property name="alias">
<value>mssql</value>
</property>
<property name="houseKeepingSleepTime">
<value>90000</value>
</property>
<property name="prototypeCount">
<value>50</value>
</property>
<property name="maximumConnectionCount">
<value>5000</value>
</property>
<property name="minimumConnectionCount">
<value>1000</value>
</property>
<property name="simultaneousBuildThrottle" >
<value>2000</value>
</property>
<property name="trace">
<value>true</value>
</property>
</bean>
<bean id="abstractExecute"
		class="com.just.zb.spring.jdbc.AbstractExceute" abstract="true">
<property name="template" ref="jdbcTemplate"></property>
<property name="dataSource" ref="datasource"></property>
</bean>
<bean id="execute" class="com.just.zb.spring.jdbc.Execute"
		parent="abstractExecute" />
</beans>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值