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

DBCP JAVA 连接池的更多相关文章

  1. DBCP数据源连接池实现原理分析

    前些天在调试公司系统的时候发现这样的一个问题:mysql数据库服务停止一段时间后再次重启后吗,tomcat服务无法请求数据库服务,调试了半天对这个问题进行定位解决,期间也搞了很多有关mysql数据库的 ...

  2. 几个主流java连接池

    池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销.这里所说的池是一种广义上的池,比如数据库连接池.线程池.内存池.对象池等.其中,对象池可以看成保存对 ...

  3. 转载: 几个主流的Java连接池整理

    https://www.cnblogs.com/linjian/p/4831088.html 池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销.这里所 ...

  4. 几个主流的Java连接池整理

    池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销.这里所说的池是一种广义上的池,比如数据库连接池.线程池.内存池.对象池等.其中,对象池可以看成保存对 ...

  5. Java 连接池的工作原理(转)

    原文:Java 连接池的工作原理 什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释 ...

  6. [JavaEE] 了解Java连接池

    转载自51CTO http://developer.51cto.com/art/201006/207768.htm 51CTO曾经为我们简单的介绍过Java连接池.要了解Java连接池我们先要了解数据 ...

  7. Redis Java连接池调研

    Redis Java连接池调研 线上服务,由于压力大报错RedisTimeOut,但是需要定位到底问题出现在哪里? 查看Redis慢日志,slowlog get 发现耗时最大的也是11000us也就是 ...

  8. dbcp数据源连接池

    一.数据源连接池 我们之前利用jdbc连接数据库,每次都要创建连接对象,销毁连接对象,如果并发访问量比较大,这样肯定比较辣 浪费数据库的效率,我们可以像之前mybatis中缓存查询到的数据一样,可以把 ...

  9. Java 使用 DBCP mysql 连接池 做数据库操作

    需要的jar包有 commons-dbutils , commons-dbcp , commons-pool , mysql-connector-java 本地database.propertties ...

随机推荐

  1. 【jqGrid for ASP.NET MVC Documentation】.学习笔记.2.jqGrid Model-View-Controller 分离

    1 基本 分离代码 和 描述 ,在ASP.NET MVC 应用程序中是非常重要的.因此,jqGrid 的 mvc 模式使用一个共同的网格安装设置,包括 Model ,Controller 和 View ...

  2. mkdir递归创建目录

    mkdir递归创建目录 rmdir递归删除目录 -p:父目录为空时,一并进行创建-v:命令执行结果可视化mkdir -pv /tmp/x/y/zrmdir -p /tmp/x/y/z mkdir -p ...

  3. iOS中 项目开发易错知识点总结

    点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [_contactTextFiled  ...

  4. Asp.net mvc5 系列笔记

    程序版本 vs 2015  1.0.0-beta4  ,得到你的肯定是我最大的动力. Asp.net Vnext 调试源码 Asp.net Vnext 自定义日志 Asp.net Vnext 中间件实 ...

  5. 20145227 《Java程序设计》第9周学习总结

    20145227 <Java程序设计>第9周学习总结 教材学习内容总结 1.JDBC简介 JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范. ...

  6. 每日一九度之 题目1039:Zero-complexity Transposition

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3372 解决:1392 题目描述: You are given a sequence of integer numbers. Zero-co ...

  7. ACM题目————马拦过河卒

    题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...

  8. 清空html代码

    不要使用 $("XXX").html(""); 清空html代码块一般有两种方式: 1)非miniui等组件区块:$("#id").empt ...

  9. 山东理工大学第七届ACM校赛-飞花的糖果 分类: 比赛 2015-06-26 10:27 15人阅读 评论(0) 收藏

    飞花的糖果 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 一日,飞花壕大手一挥,买了N个的两两不相同糖果,他想要拿出M个糖果送给他心仪 ...

  10. c++のdll两种调用方式

    调用DLL有两种方法:静态调用和动态调用. (一).静态调用其步骤如下: 1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下; 2.把你的youApp. ...