首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

dbcp连接池兑现

2012-12-15 
dbcp连接池实现文章原地址:http://www.iteye.com/topic/117225DBCP是Apache的一个开源项目:commons.dbcp.j

dbcp连接池实现

文章原地址:http://www.iteye.com/topic/117225

DBCP是Apache的一个开源项目:
commons.dbcp.jar
http://jakarta.apache.org/commons/dbcp/index.html

DBCP依赖Apache的另外2个开源项目
commons.collections.jar和commons.pool.jar

下载这些包并将这些包的路径添加到classpath中就可以使用dbcp做为项目中的数据库连接池使用了。

以下是我的连接池

java 代码
  1. package?selfservice; ?? ??
  2. import?java.io.FileNotFoundException; ?? import?java.io.IOException; ??
  3. import?java.sql.Connection; ?? import?java.sql.DriverManager; ??
  4. import?java.sql.ResultSet; ?? import?java.sql.SQLException; ??
  5. import?java.sql.Statement; ?? ??
  6. import?org.apache.commons.dbcp.ConnectionFactory; ?? import?org.apache.commons.dbcp.DriverManagerConnectionFactory; ??
  7. import?org.apache.commons.dbcp.PoolableConnectionFactory; ?? import?org.apache.commons.dbcp.PoolingDriver; ??
  8. import?org.apache.commons.pool.ObjectPool; ?? import?org.apache.commons.pool.impl.GenericObjectPool; ??
  9. ?? ??
  10. public?class?PoolManager?{?? ?? ????private?static?String? ??
  11. ????????????driver="oracle.jdbc.driver.OracleDriver",//驱动 ?? ????????????url?=?"jdbc:oracle:thin:@192.168.0.40:1521:drcom",//URL ??
  12. ????????????Name="drcom",//用户名 ?? ????????????Password="drcom";//密码 ??
  13. ???? ?? ????private?static?Class?driverClass?=?null; ??
  14. ????private?static?ObjectPool?connectionPool?=?null; ?? ??
  15. ????public?PoolManager(){??????? ?? ????}??? ??
  16. ???? ?? ????/** ?
  17. ?????*?装配配置文件 ? ?????*?initProperties???? ?
  18. ?????*/?? ????private?static?void?loadProperties(){ ??
  19. ????????try?{ ?? ????????????java.io.InputStream?stream?=?new?java.io.FileInputStream("config.properties"); ??
  20. ????????????java.util.Properties?props?=?new?java.util.Properties(); ?? ????????????props.load(stream); ??
  21. ???????????? ?? ????????????driver?=?props.getProperty("ORACLE_DRIVER"); ??
  22. ????????????url?=?props.getProperty("ORACLE_URL"); ?? ????????????Name?=?props.getProperty("ORACLE_LOGIN_NAME"); ??
  23. ????????????Password?=?props.getProperty("ORACLE_LOGIN_PASSWORD"); ?? ???????????? ??
  24. ????????}?catch?(FileNotFoundException?e)?{ ?? ????????????System.out.println("读取配置文件异常");????????? ??
  25. ????????}?catch(IOException?ie){ ?? ????????????System.out.println("读取配置文件时IO异常"); ??
  26. ????????} ?? ????} ??
  27. ???? ?? ????/**? ?
  28. ?????*?初始化数据源? ? ?????*/? ??
  29. ????private?static?synchronized?void?initDataSource()?{????????? ?? ????????if?(driverClass?==?null)?{? ??
  30. ????????????try?{? ?? ????????????????driverClass?=?Class.forName(driver);? ??
  31. ????????????}?catch?(ClassNotFoundException?e)?{? ?? ????????????????e.printStackTrace(); ??
  32. ????????????}? ?? ????????}? ??
  33. ????}? ?? ? ??
  34. ????/**? ? ?????*?连接池启动? ?
  35. ?????*?@throws?Exception? ? ?????*/? ??
  36. ????public?static?void?StartPool()?{ ?? ????????loadProperties(); ??
  37. ????????initDataSource();? ?? ????????if?(connectionPool?!=?null)?{? ??
  38. ????????????ShutdownPool();? ?? ????????}?? ??
  39. ????????try?{? ?? ????????????connectionPool?=?new?GenericObjectPool(null);? ??
  40. ????????????ConnectionFactory?connectionFactory?=?new?DriverManagerConnectionFactory(url,?Name,?Password);? ?? ????????????PoolableConnectionFactory?poolableConnectionFactory?=?new?PoolableConnectionFactory(connectionFactory,?connectionPool,?null,?null,?false,?true);? ??
  41. ????????????Class.forName("org.apache.commons.dbcp.PoolingDriver");? ?? ????????????PoolingDriver?driver?=?(PoolingDriver)?DriverManager.getDriver("jdbc:apache:commons:dbcp:");? ??
  42. ????????????driver.registerPool("dbpool",?connectionPool);?????????????? ?? ????????????System.out.println("装配连接池OK");? ??
  43. ????????}?catch?(Exception?e)?{? ?? ????????????e.printStackTrace(); ??
  44. ????????}? ?? ????}? ??
  45. ? ?? ????/**? ?
  46. ?????*?释放连接池? ? ?????*/? ??
  47. ????public?static?void?ShutdownPool()?{? ?? ????????try?{? ??
  48. ????????????PoolingDriver?driver?=?(PoolingDriver)?DriverManager.getDriver("jdbc:apache:commons:dbcp:");? ?? ????????????driver.closePool("dbpool"); ??
  49. ????????}?catch?(SQLException?e)?{? ?? ????????????e.printStackTrace(); ??
  50. ????????}? ?? ????}????? ??
  51. ? ?? ????/**? ?
  52. ?????*?取得连接池中的连接? ? ?????*?@return? ?
  53. ?????*/? ?? ????public?static?Connection?getConnection()?{? ??
  54. ????????Connection?conn?=?null;? ?? ????????if(connectionPool?==?null)? ??
  55. ????????????StartPool();? ?? ????????try?{? ??
  56. ????????????conn?=?DriverManager.getConnection("jdbc:apache:commons:dbcp:dbpool");? ?? ????????}?catch?(SQLException?e)?{? ??
  57. ????????????e.printStackTrace(); ?? ????????}? ??
  58. ????????return?conn;? ?? ????}? ??
  59. ???? ?? ????/** ?
  60. ?????*?获取连接 ? ?????*?getConnection ?
  61. ?????*?@param?name ? ?????*?@return ?
  62. ?????*/?? ????public?static?Connection?getConnection(String?name){ ??
  63. ????????return?getConnection(); ?? ????} ??
  64. ????/** ? ?????*?释放连接 ?
  65. ?????*?freeConnection ? ?????*?@param?conn ?
  66. ?????*/?? ????public?static?void?freeConnection(Connection?conn){ ??
  67. ????????if(conn?!=?null){ ?? ????????????try?{ ??
  68. ????????????????conn.close(); ?? ????????????}?catch?(SQLException?e)?{?????????????? ??
  69. ????????????????e.printStackTrace(); ?? ????????????} ??
  70. ????????} ?? ????} ??
  71. ????/** ? ?????*?释放连接 ?
  72. ?????*?freeConnection ? ?????*?@param?name ?
  73. ?????*?@param?con ? ?????*/??
  74. ????public?static?void?freeConnection?(String?name,Connection?con){ ?? ????????freeConnection(con); ??
  75. ????} ?? ???? ??
  76. ????/** ? ?????*?例子 ?
  77. ?????*?main ? ?????*?@param?args ?
  78. ?????*/?? ????public?static?void?main(String[]?args)?{???????? ??
  79. ????????try?{ ?? ????????????Connection?conn?=?PoolManager.getConnection(); ??
  80. ????????????if(conn?!=?null){ ?? ????????????????Statement?statement?=?conn.createStatement(); ??
  81. ????????????????ResultSet?rs?=?statement.executeQuery("select?*?from?tblgxinterface"); ?? ????????????????int?c?=?rs.getMetaData().getColumnCount(); ??
  82. ????????????????while(rs.next()){??????????????????? ?? ????????????????????System.out.println(); ??
  83. ????????????????????for(int?i=1;i<=c;i++){ ?? ????????????????????????System.out.print(rs.getObject(i)); ??
  84. ????????????????????} ?? ????????????????} ??
  85. ????????????????rs.close(); ?? ????????????} ??
  86. ????????????PoolManager.freeConnection(conn); ?? ????????}?catch?(SQLException?e)?{?????????? ??
  87. ????????????e.printStackTrace(); ?? ????????} ??
  88. ?? ????} ??
  89. ?? } ??

以上创建一个连接池,并从连接池中得到连接,连接池会管理每个连接,以上测试通过。

热点排行