DBCP JAVA 连接池

  1. package com.sinoglobal.db;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8. import java.util.Locale;  
  9. import java.util.ResourceBundle;  
  10.   
  11. import org.apache.commons.dbcp.ConnectionFactory;  
  12. import org.apache.commons.dbcp.DriverManagerConnectionFactory;  
  13. import org.apache.commons.dbcp.PoolableConnectionFactory;  
  14. import org.apache.commons.dbcp.PoolingDriver;  
  15. import org.apache.commons.pool.ObjectPool;  
  16. import org.apache.commons.pool.impl.GenericObjectPool;  
  17.   
  18. @SuppressWarnings("unchecked")  
  19. public class PoolManager {  
  20.     private static String driver = "net.sourceforge.jtds.jdbc.Driver"; // 驱动  
  21.     private static String url = ""; // URL  
  22.     private static String name = "sa"; // 用户名  
  23.     private static String password = ""; // 密码  
  24.     private static Class driverClass = null;  
  25.     private static ObjectPool connectionPool = null;  
  26.     private static String poolname = "";  
  27.     private static ResourceBundle rb;  
  28.   
  29.     /** 
  30.      * 初始化数据源 
  31.      */  
  32.     private static synchronized void initDataSource() {  
  33.         if (driverClass == null) {  
  34.             try {  
  35.                 driverClass = Class.forName(driver);  
  36.             } catch (ClassNotFoundException e) {  
  37.                 e.printStackTrace();  
  38.             }  
  39.         }  
  40.     }  
  41.   
  42.     /** 
  43.      * 装配配置文件 initProperties 
  44.      */  
  45.     private static void loadProperties() {  
  46.         rb = ResourceBundle.getBundle("config", Locale.getDefault());  
  47.         driver = rb.getString("jdbc.sql.driverClassName");  
  48.         url = rb.getString("jdbc.sql.url");  
  49.         name = rb.getString("jdbc.sql.username");  
  50.         password = rb.getString("jdbc.sql.password");  
  51.         poolname = rb.getString("jdbc.sql.poolname");  
  52.     }  
  53.   
  54.     /** 
  55.      * 连接池启动 
  56.      *  
  57.      * @throws Exception 
  58.      */  
  59.     public static void StartPool() {  
  60.         loadProperties();  
  61.         initDataSource();  
  62.         if (connectionPool != null) {  
  63.             ShutdownPool();  
  64.         }  
  65.         try {  
  66.             connectionPool = new GenericObjectPool(null);  
  67.             ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(  
  68.                     url, name, password);  
  69.             new PoolableConnectionFactory(connectionFactory, connectionPool,  
  70.                     null, null, false, true);  
  71.             Class.forName("org.apache.commons.dbcp.PoolingDriver");  
  72.             PoolingDriver driver = (PoolingDriver) DriverManager  
  73.                     .getDriver("jdbc:apache:commons:dbcp:");  
  74.             driver.registerPool(poolname, connectionPool);  
  75.         } catch (Exception e) {  
  76.             e.printStackTrace();  
  77.         }  
  78.     }  
  79.   
  80.     /** 
  81.      * 释放连接池 
  82.      */  
  83.     public static void ShutdownPool() {  
  84.         try {  
  85.             PoolingDriver driver = (PoolingDriver) DriverManager  
  86.                     .getDriver("jdbc:apache:commons:dbcp:");  
  87.             driver.closePool(poolname);  
  88.         } catch (SQLException e) {  
  89.             e.printStackTrace();  
  90.         }  
  91.     }  
  92.   
  93.     /** 
  94.      * 取得连接池中的连接 
  95.      *  
  96.      * @return 
  97.      */  
  98.     public static Connection getConnection() {  
  99.         Connection conn = null;  
  100.         if (connectionPool == null)  
  101.             StartPool();  
  102.         try {  
  103.             conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:"  
  104.                     + poolname);  
  105.         } catch (SQLException e) {  
  106.             e.printStackTrace();  
  107.         }  
  108.         return conn;  
  109.     }  
  110.   
  111.     /** 
  112.      * 获取连接 getConnection 
  113.      *  
  114.      * @param name 
  115.      * @return 
  116.      */  
  117.     public static Connection getConnection(String name) {  
  118.         return getConnection();  
  119.     }  
  120.   
  121.     /** 
  122.      * 释放连接 freeConnection 
  123.      *  
  124.      * @param conn 
  125.      */  
  126.     public static void freeConnection(Connection conn) {  
  127.         if (conn != null) {  
  128.             try {  
  129.                 conn.close();  
  130.             } catch (SQLException e) {  
  131.                 e.printStackTrace();  
  132.             }  
  133.         }  
  134.     }  
  135.   
  136.     /** 
  137.      * 释放连接 freeConnection 
  138.      *  
  139.      * @param name 
  140.      * @param con 
  141.      */  
  142.     public static void freeConnection(String name, Connection con) {  
  143.         freeConnection(con);  
  144.     }  
  145.   
  146.     /** 
  147.      * 例子 main 
  148.      *  
  149.      * @param args 
  150.      */  
  151.     public static void main(String[] args) {  
  152.         try {  
  153.             Connection conn = PoolManager.getConnection();  
  154.             System.out.println(conn.isClosed());  
  155.             if (conn != null) {  
  156.                 Statement statement = conn.createStatement();  
  157.                 ResultSet rs = statement  
  158.                         .executeQuery("select * from test2..log");  
  159.                 int c = rs.getMetaData().getColumnCount();  
  160.                 while (rs.next()) {  
  161.                     System.out.println();  
  162.                     for (int i = 1; i <= c; i++) {  
  163.                         System.out.print(rs.getObject(i));  
  164.                     }  
  165.                 }  
  166.                 rs.close();  
  167.             }  
  168.             PoolManager.freeConnection(conn);  
  169.         } catch (SQLException e) {  
  170.             e.printStackTrace();  
  171.         }  
  172.   
  173.     }  
  174.   
  175. }  
posted @ 2015-11-30 13:18  zfswff  阅读(372)  评论(0编辑  收藏  举报