博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java数据库连接池
阅读量:4610 次
发布时间:2019-06-09

本文共 29417 字,大约阅读时间需要 98 分钟。

基础内容引用自 http://blog.sina.com.cn/s/blog_55d57a460100iq71.html

人做了一些修改,并封装了jdbc,不足之处请指正。

改造的原因是这样的,由于项目需求发现此数据库连接池样例只能配置一个数据库的连接,对需连多个数据库此连接池就不好用了,所以稍加改造;不多说见代码;

首先封装的jdbc

1 package com.goodwillcis.common;  2   3 import java.io.IOException;  4 import java.io.InputStream;  5 import java.io.UnsupportedEncodingException;  6 import java.sql.Connection;  7 import java.sql.DriverManager;  8 import java.sql.ResultSet;  9 import java.sql.ResultSetMetaData; 10 import java.sql.SQLException; 11 import java.sql.Statement; 12 import java.util.HashMap; 13 import java.util.Map; 14 import java.util.Properties; 15  16 public class CommonFunction { 17      18     public CommonFunction(){ 19     }  20      21     /** 22      * 获取config.properties配置文件中配置项�? 23      * 2015-12-28 24      * 吴海�? 25      */ 26     public String GetPropertie(String p_strProName) { 27         Properties prop = new Properties(); 28         InputStream is = this.getClass().getResourceAsStream( 29                 "/config.properties"); 30         try { 31             prop.load(is); 32             String _strResult = prop.getProperty(p_strProName).trim(); 33             return _strResult; 34         } catch (Exception e) { 35             e.printStackTrace(); 36         } 37         return ""; 38     } 39      40      41      42      43     /** 44      * 执行查询语句,参数1 sql语句 参数2 数据库连接串名称具体写法采用约定大于配置规则  45      * wuhailong 46      * 2016-01-20 47      */ 48     public static HashMap
> ExecuteQuery(String p_strSQL,String p_strDBName) { 49 Statement stmt = null; 50 try { 51 String sql = p_strSQL; 52 ConnectionPool connpool = ConnectionPool.getInstance(p_strDBName); 53 Connection conn = connpool.getConnection(p_strDBName);; 54 //System.out.println(sql); 55 stmt = conn.createStatement(); 56 ResultSet rs = stmt.executeQuery(sql); 57 HashMap
> table =FixData(rs); 58 connpool.returnConnection(conn,p_strDBName); 59 return table; 60 } catch (Exception e) { 61 e.printStackTrace(); 62 return null; 63 }finally{ 64 if(stmt!=null){ 65 try { 66 stmt.close(); 67 } catch (SQLException e) { 68 // TODO Auto-generated catch block 69 e.printStackTrace(); 70 } 71 } 72 } 73 } 74      //将resultset 转化为 一个hashmap 75 public static HashMap
> FixData(ResultSet p_rsData) throws SQLException, UnsupportedEncodingException{ 76 HashMap
> table = new HashMap
>(); 77 ResultSetMetaData rsmd; 78 rsmd = p_rsData.getMetaData(); 79 int numCols = rsmd.getColumnCount(); 80 int rownum = 0; 81 while (p_rsData.next()) { 82 HashMap
row = new HashMap
(); 83 for(int columnindex = 1;columnindex<=numCols;columnindex++){ 84 String _strComunName =rsmd.getColumnName(columnindex); 85 Object _objValue = p_rsData.getObject(_strComunName)==null?"":p_rsData.getObject(_strComunName); 86 //String _strValue = new String(_objValue.toString().getBytes("iso-8859-1"), "GBK"); 87 row.put(_strComunName.toUpperCase(), _objValue); 88 } 89 table.put(rownum+"", row); 90 rownum++; 91 //System.out.println(rownum); 92 } 93 return table; 94 } 95 96 /** 97 * 执行增删改操作 参数1 sql语句 参数2 数据库名 98 * wuhailong 99 * 2016-01-20100 * @throws SQLException 101 */102 public static int ExecuteNonQuery(String p_strSQL,String p_strDBName) {103 Statement stmt= null;104 try {105 String sql = p_strSQL;106 //System.out.println(sql);107 ConnectionPool connpool = ConnectionPool.getInstance(p_strDBName);108 Connection conn = connpool.getConnection(p_strDBName);109 stmt = conn.createStatement();110 int _n = stmt.executeUpdate(sql);111 connpool.returnConnection(conn,p_strDBName);112 return _n;113 } catch (Exception e) {114 e.printStackTrace();115 return -1;116 }finally{117 if(stmt!=null){118 try {119 stmt.close();120 } catch (SQLException e) {121 // TODO Auto-generated catch block122 e.printStackTrace();123 }124 }125 }126 }127 128

 

数据库连接池代码

1 package com.goodwillcis.common;  2   3 import java.sql.Connection;  4 import java.sql.DatabaseMetaData;  5 import java.sql.Driver;  6 import java.sql.DriverManager;  7 import java.sql.ResultSet;  8 import java.sql.SQLException;  9 import java.sql.Statement; 10 import java.util.Enumeration; 11 import java.util.HashMap; 12 import java.util.Map; 13 import java.util.Vector; 14  15 public class ConnectionPool { 16  17     private String jdbcDriver = ""; // 数据库驱�? 18     private String dbUrl = ""; // 数据 URL 19     private String dbUsername = ""; // 数据库用户名 20     private String dbPassword = ""; // 数据库用户密�? 21     private String testTable = ""; // 测试连接是否可用的测试表名,默认没有测试�? 22     private int initialConnections = 20; // 连接池的初始大小 23     private int incrementalConnections = 5;// 连接池自动增加的大小 24     private int maxConnections = 50; // 连接池最大的大小 25     private Vector connections = null; // 存放连接池中数据库连接的向量 , 初始时为 null 26     private Map
connectionsmap =null; // 存放连接池中数据库连接的向量 , 初始时为 null 27 // 它中存放的对象为 PooledConnection �? 28 private static ConnectionPool instance = null; 29 private static Map
instances = new HashMap
(); 30 31 public static ConnectionPool getInstance() { 32 if (instance == null) { 33 synchronized (ConnectionPool.class) { 34 if (instance == null) { 35 instance = new ConnectionPool(); 36 } 37 } 38 } 39 try { 40 instance.createPool(); 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } 44 return instance; 45 } 46 47 /** 48 * create a hashmap connectionpool the key is dbname value is connectionpool 49 * you can get the connectionpool with dbname 50 * 2016-01-20 51 * wuhailong 52 * @param p_strDBName 53 * @return 54 * @throws Exception 55 */ 56 public static ConnectionPool getInstance(String p_strDBName) throws Exception { 57 ConnectionPool cp = null; 58 if (instances == null) { 59 instances = new HashMap
(); 60 } else { 61 if (instances.get(p_strDBName) == null) { 62 cp= new ConnectionPool(p_strDBName); 63 instances.put(p_strDBName, cp); 64 cp.createPool(p_strDBName); 65 } 66 } 67 return instances.get(p_strDBName); 68 } 69 70 71 /** 72 * Ĭ��Db_ConnString��Db_User��Db_Password��Db_Driver 73 */ 74 private ConnectionPool() { 75 CommonFunction c = new CommonFunction(); 76 String Db_ConnString =c.GetPropertie("Db_ConnString"); 77 String Db_User =c.GetPropertie("Db_User"); 78 String Db_Password =c.GetPropertie("Db_Password"); 79 String Db_Driver =c.GetPropertie("Db_Driver"); 80 this.jdbcDriver = Db_Driver;//"oracle.jdbc.driver.OracleDriver"; 81 this.dbUrl = Db_ConnString; 82 this.dbUsername = Db_User; 83 this.dbPassword = Db_Password; 84 } 85 86 87 /** 88 * ָ������ 89 * @param p_strDiver 90 * @param p_strConnectionString 91 * @param p_strUser 92 * @param p_strPsw 93 */ 94 private ConnectionPool(String p_strDBName) { 95 CommonFunction c = new CommonFunction(); 96 String Db_ConnString =c.GetPropertie(p_strDBName+"_Db_ConnString"); 97 String Db_User =c.GetPropertie(p_strDBName+"_Db_User"); 98 String Db_Password =c.GetPropertie(p_strDBName+"_Db_Password"); 99 String Db_Driver =c.GetPropertie(p_strDBName+"_Db_Driver");100 this.jdbcDriver = Db_Driver;101 this.dbUrl = Db_ConnString;102 this.dbUsername = Db_User;103 this.dbPassword = Db_Password;104 }105 106 /**107 * 创建�?��数据库连接池,连接池中的可用连接的数量采用类成员 initialConnections 中设置的�?108 */109 110 public synchronized void createPool() throws Exception {111 // 确保连接池没有创�?112 // 如果连接池己经创建了,保存连接的向量 connections 不会为空113 if (connections != null) {114 return; // 如果己经创建,则返回115 }116 // 实例�?JDBC Driver 中指定的驱动类实�?117 Driver driver = (Driver) (Class.forName(this.jdbcDriver).newInstance());118 DriverManager.registerDriver(driver); // 注册 JDBC 驱动程序119 // 创建保存连接的向�?, 初始时有 0 个元�?120 connections = new Vector();121 // 根据 initialConnections 中设置的值,创建连接�?122 createConnections(this.initialConnections);123 System.out.println(" 数据库连接池创建成功�?");124 }125 126 public synchronized void createPool(String p_strDBName) throws Exception {127 if (connectionsmap != null) {128 return; // 如果己经创建,则返回129 }130 CommonFunction cf = new CommonFunction();131 String _strDriver = cf.GetPropertie(p_strDBName+"_Db_Driver");132 Driver driver = (Driver) (Class.forName(_strDriver).newInstance());133 DriverManager.registerDriver(driver);134 Vector conns = new Vector();135 connectionsmap = new HashMap
();136 connectionsmap.put(p_strDBName, conns);137 createConnections(this.initialConnections,p_strDBName);138 139 System.out.println(" connectionpool created");140 }141 142 143 /**144 * 145 * 创建�?numConnections 指定数目的数据库连接 , 并把这些连接146 * 147 * 放入 connections 向量�?148 * 149 * 150 * 151 * @param numConnections152 * 要创建的数据库连接的数目153 * 154 */155 156 @SuppressWarnings("unchecked")157 private void createConnections(int numConnections) throws SQLException {158 // 循环创建指定数目的数据库连接159 for (int x = 0; x < numConnections; x++) {160 161 // 是否连接池中的数据库连接的数量己经达到最大?�?��值由类成�?maxConnections162 // 指出,如�?maxConnections �?0 或负数,表示连接数量没有限制�?163 // 如果连接数己经达到最大,即�?出�?164 165 if (this.maxConnections > 0166 && this.connections.size() >= this.maxConnections) {167 break;168 }169 // add a new PooledConnection object to connections vector170 // 增加�?��连接到连接池中(向量 connections 中)171 try {172 connections.addElement(new PooledConnection(newConnection()));173 } catch (SQLException e) {174 System.out.println(" 创建数据库连接失败! " + e.getMessage());175 throw new SQLException();176 }177 System.out.println(" created connection "+x);178 }179 }180 181 @SuppressWarnings("unchecked")182 private void createConnections(int numConnections,String p_strDBName) throws SQLException {183 // 循环创建指定数目的数据库连接184 for (int x = 0; x < numConnections; x++) {185 186 // 是否连接池中的数据库连接的数量己经达到最大?�?��值由类成�?maxConnections187 // 指出,如�?maxConnections �?0 或负数,表示连接数量没有限制�?188 // 如果连接数己经达到最大,即�?出�?189 Vector connections =connectionsmap.get(p_strDBName);190 if (this.maxConnections > 0191 && connections.size() >= this.maxConnections) {192 break;193 }194 // add a new PooledConnection object to connections vector195 // 增加�?��连接到连接池中(向量 connections 中)196 try {197 connections.addElement(new PooledConnection(newConnection(p_strDBName)));198 } catch (SQLException e) {199 System.out.println(" connection false... " + e.getMessage());200 throw new SQLException();201 }202 System.out.println(" connection created..."+x);203 }204 }205 206 private void createConnections(String p_strDBName,int numConnections) throws SQLException {207 // 循环创建指定数目的数据库连接208 for (int x = 0; x < numConnections; x++) {209 210 // 是否连接池中的数据库连接的数量己经达到最大?�?��值由类成�?maxConnections211 // 指出,如�?maxConnections �?0 或负数,表示连接数量没有限制�?212 // 如果连接数己经达到最大,即�?出�?213 Vector _vConn = connectionsmap.get(p_strDBName);214 if (this.maxConnections > 0215 && _vConn.size() >= this.maxConnections) {216 break;217 }218 // add a new PooledConnection object to connections vector219 // 增加�?��连接到连接池中(向量 connections 中)220 try {221 _vConn.addElement(new PooledConnection(newConnection(p_strDBName)));222 } catch (SQLException e) {223 System.out.println(" 创建数据库连接失败! " + e.getMessage());224 throw new SQLException();225 }226 System.out.println(" 数据库连接己创建 ......");227 }228 }229 230 /**231 * 232 * 创建�?��新的数据库连接并返回�?233 * 234 * 235 * 236 * @return 返回�?��新创建的数据库连�?237 * 238 */239 240 private Connection newConnection() throws SQLException {241 242 // 创建�?��数据库连�?243 244 Connection conn = DriverManager.getConnection(dbUrl, dbUsername,245 dbPassword);246 // 如果这是第一次创建数据库连接,即�?��数据库,获得此数据库允许支持�?247 // �?��客户连接数目248 // connections.size()==0 表示目前没有连接己被创建249 if (connections.size() == 0) {250 DatabaseMetaData metaData = conn.getMetaData();251 int driverMaxConnections = metaData.getMaxConnections();252 // 数据库返回的 driverMaxConnections 若为 0 ,表示此数据库没有最�?253 // 连接限制,或数据库的�?��连接限制不知�?254 // driverMaxConnections 为返回的�?��整数,表示此数据库允许客户连接的数目255 // 如果连接池中设置的最大连接数量大于数据库允许的连接数�?, 则置连接池的�?��256 // 连接数目为数据库允许的最大数�?257 if (driverMaxConnections > 0258 && this.maxConnections > driverMaxConnections) {259 this.maxConnections = driverMaxConnections;260 }261 }262 return conn; // 返回创建的新的数据库连接263 }264 265 private Connection newConnection(String p_strDBName) throws SQLException {266 267 // 创建�?��数据库连�?268 269 CommonFunction cf = new CommonFunction();270 String _strUrl = cf.GetPropertie(p_strDBName+"_Db_ConnString");271 String _strUser = cf.GetPropertie(p_strDBName+"_Db_User");272 String _strPsw = cf.GetPropertie(p_strDBName+"_Db_Password");273 Connection conn = DriverManager.getConnection(_strUrl, _strUser,274 _strPsw);275 Vector connections= connectionsmap.get(p_strDBName);276 if (connections.size() == 0) {277 DatabaseMetaData metaData = conn.getMetaData();278 int driverMaxConnections = metaData.getMaxConnections();279 if (driverMaxConnections > 0280 && this.maxConnections > driverMaxConnections) {281 this.maxConnections = driverMaxConnections;282 }283 }284 return conn; // 返回创建的新的数据库连接285 }286 287 /**288 * 289 * 通过调用 getFreeConnection() 函数返回�?��可用的数据库连接 ,290 * 291 * 如果当前没有可用的数据库连接,并且更多的数据库连接不能创建(如连接池大小的限制),此函数等待�?��再尝试获取�?292 * 293 * @return 返回�?��可用的数据库连接对象294 * 295 */296 297 public synchronized Connection getConnection() throws SQLException {298 // 确保连接池己被创�?299 if (connections == null) {300 return null; // 连接池还没创建,则返�?null301 }302 Connection conn = getFreeConnection(); // 获得�?��可用的数据库连接303 // 如果目前没有可以使用的连接,即所有的连接都在使用�?304 while (conn == null) {305 // 等一会再�?306 wait(250);307 System.out.println("连接为空正在等待创建");308 conn = getFreeConnection(); // 重新再试,直到获得可用的连接,如�?309 // getFreeConnection() 返回的为 null310 // 则表明创建一批连接后也不可获得可用连�?311 }312 return conn;// 返回获得的可用的连接313 }314 315 316 public synchronized Connection getConnection(String p_strDBName) throws SQLException {317 // 确保连接池己被创�?318 Vector connections=connectionsmap.get(p_strDBName);319 if (connections == null) {320 return null; // 连接池还没创建,则返�?null321 }322 Connection conn = getFreeConnection(p_strDBName); // 获得�?��可用的数据库连接323 // 如果目前没有可以使用的连接,即所有的连接都在使用�?324 while (conn == null) {325 // 等一会再�?326 wait(250);327 System.out.println("连接为空正在等待创建");328 conn = getFreeConnection(p_strDBName); // 重新再试,直到获得可用的连接,如�?329 // getFreeConnection() 返回的为 null330 // 则表明创建一批连接后也不可获得可用连�?331 }332 return conn;// 返回获得的可用的连接333 }334 335 336 /**337 * 338 * 本函数从连接池向�?connections 中返回一个可用的的数据库连接,如�?339 * 340 * 当前没有可用的数据库连接,本函数则根�?incrementalConnections 设置341 * 342 * 的�?创建几个数据库连接,并放入连接池中�?343 * 344 * 如果创建后,�?��的连接仍都在使用中,则返�?null345 * 346 * @return 返回�?��可用的数据库连接347 * 348 */349 350 private Connection getFreeConnection() throws SQLException {351 352 // 从连接池中获得一个可用的数据库连�?353 Connection conn = findFreeConnection();354 if (conn == null) {355 // 如果目前连接池中没有可用的连�?356 // 创建�?��连接357 createConnections(incrementalConnections);358 // 重新从池中查找是否有可用连接359 conn = findFreeConnection();360 if (conn == null) {361 // 如果创建连接后仍获得不到可用的连接,则返�?null362 }363 364 }365 return conn;366 }367 368 private Connection getFreeConnection(String p_strDBName) throws SQLException {369 370 // 从连接池中获得一个可用的数据库连�?371 Connection conn = findFreeConnection(p_strDBName);372 if (conn == null) {373 // 如果目前连接池中没有可用的连�?374 // 创建�?��连接375 createConnections(incrementalConnections,p_strDBName);376 // 重新从池中查找是否有可用连接377 conn = findFreeConnection(p_strDBName);378 if (conn == null) {379 // 如果创建连接后仍获得不到可用的连接,则返�?null380 }381 382 }383 return conn;384 }385 386 /**387 * 388 * 查找连接池中�?��的连接,查找�?��可用的数据库连接�?389 * 390 * 如果没有可用的连接,返回 null391 * 392 * 393 * 394 * @return 返回�?��可用的数据库连接395 * 396 */397 398 private Connection findFreeConnection() throws SQLException {399 Connection conn = null;400 PooledConnection pConn = null;401 // 获得连接池向量中�?��的对�?402 Enumeration enumerate = connections.elements();403 // 遍历�?��的对象,看是否有可用的连�?404 while (enumerate.hasMoreElements()) {405 pConn = (PooledConnection) enumerate.nextElement();406 if (!pConn.isBusy()) {407 // 如果此对象不忙,则获得它的数据库连接并把它设为忙408 conn = pConn.getConnection();409 pConn.setBusy(true);410 // 测试此连接是否可�?411 if (!testConnection(conn)) {412 // 如果此连接不可再用了,则创建�?��新的连接�?413 // 并替换此不可用的连接对象,如果创建失败,返回 null414 try {415 conn = newConnection();416 } catch (SQLException e) {417 418 System.out.println(" 创建数据库连接失败! " + e.getMessage());419 420 return null;421 }422 pConn.setConnection(conn);423 }424 break; // 己经找到�?��可用的连接,�?��425 }426 }427 return conn;// 返回找到到的可用连接428 }429 430 431 private Connection findFreeConnection(String p_strDBName){432 Connection conn = null;433 PooledConnection pConn = null;434 Vector connections =connectionsmap.get(p_strDBName);435 Enumeration enumerate = connections.elements();436 while (enumerate.hasMoreElements()) {437 pConn = (PooledConnection) enumerate.nextElement();438 if (!pConn.isBusy()) {439 conn = pConn.getConnection();440 pConn.setBusy(true);441 if (!testConnection(conn)) {442 try {443 conn = newConnection();444 } catch (SQLException e) {445 System.out.println(" 创建数据库连接失败! " + e.getMessage());446 return null;447 }448 pConn.setConnection(conn);449 }450 break; 451 }452 }453 return conn;454 }455 456 /**457 * 测试�?��连接是否可用,如果不可用,关掉它并返�?false 否则可用返回 true458 * 459 * @param conn460 * �?��测试的数据库连接461 * @return 返回 true 表示此连接可用, false 表示不可�?462 */463 464 private boolean testConnection(Connection conn) {465 try {466 // 判断测试表是否存�?467 if (testTable.equals("")) {468 // 如果测试表为空,试着使用此连接的 setAutoCommit() 方法469 // 来判断连接否可用(此方法只在部分数据库可用,如果不可�?,470 // 抛出异常)�?注意:使用测试表的方法更可靠471 conn.setAutoCommit(true);472 } else {
// 有测试表的时候使用测试表测试473 // check if this connection is valid474 Statement stmt = conn.createStatement();475 ResultSet rs = stmt.executeQuery("select count(*) from "476 + testTable);477 rs.next();478 System.out.println(testTable + ":表的记录数为:" + rs.getInt(1));479 }480 } catch (SQLException e) {481 // 上面抛出异常,此连接己不可用,关闭它,并返回 false;482 e.printStackTrace();483 closeConnection(conn);484 return false;485 }486 // 连接可用,返�?true487 return true;488 }489 490 /**491 * 此函数返回一个数据库连接到连接池中,并把此连接置为空闲�?492 * 493 * �?��使用连接池获得的数据库连接均应在不使用此连接时返回它�?494 * 495 * @param �?��回到连接池中的连接对�?496 */497 498 public void returnConnection(Connection conn) {499 500 // 确保连接池存在,如果连接没有创建(不存在),直接返回501 if (connections == null) {502 System.out.println(" 连接池不存在,无法返回此连接到连接池�?!");503 return;504 }505 PooledConnection pConn = null;506 Enumeration enumerate = connections.elements();507 // 遍历连接池中的所有连接,找到这个要返回的连接对象508 while (enumerate.hasMoreElements()) {509 pConn = (PooledConnection) enumerate.nextElement();510 // 先找到连接池中的要返回的连接对象511 if (conn == pConn.getConnection()) {512 // 找到�?, 设置此连接为空闲状�?513 pConn.setBusy(false);514 break;515 }516 }517 }518 519 public void returnConnection(Connection conn,String p_strDBName) {520 // 确保连接池存在,如果连接没有创建(不存在),直接返回521 Vector connections = connectionsmap.get(p_strDBName);522 if (connections == null) {523 System.out.println(" 连接池不存在,无法返回此连接到连接池�?!");524 return;525 }526 PooledConnection pConn = null;527 Enumeration enumerate = connections.elements();528 // 遍历连接池中的所有连接,找到这个要返回的连接对象529 while (enumerate.hasMoreElements()) {530 pConn = (PooledConnection) enumerate.nextElement();531 // 先找到连接池中的要返回的连接对象532 if (conn == pConn.getConnection()) {533 // 找到�?, 设置此连接为空闲状�?534 pConn.setBusy(false);535 break;536 }537 }538 }539 540 /**541 * 刷新连接池中�?��的连接对�?542 */543 public synchronized void refreshConnections() throws SQLException {544 // 确保连接池己创新存在545 if (connections == null) {546 System.out.println(" 连接池不存在,无法刷�?!");547 return;548 }549 PooledConnection pConn = null;550 Enumeration enumerate = connections.elements();551 while (enumerate.hasMoreElements()) {552 // 获得�?��连接对象553 pConn = (PooledConnection) enumerate.nextElement();554 // 如果对象忙则�?5 �?,5 秒后直接刷新555 if (pConn.isBusy()) {556 wait(5000); // �?5 �?557 }558 // 关闭此连接,用一个新的连接代替它�?559 closeConnection(pConn.getConnection());560 pConn.setConnection(newConnection());561 pConn.setBusy(false);562 }563 }564 565 /**566 * 关闭连接池中�?��的连接,并清空连接池�?567 */568 public synchronized void closeConnectionPool() throws SQLException {569 // 确保连接池存在,如果不存在,返回570 if (connections == null) {571 System.out.println(" 连接池不存在,无法关�?!");572 return;573 }574 PooledConnection pConn = null;575 Enumeration enumerate = connections.elements();576 while (enumerate.hasMoreElements()) {577 pConn = (PooledConnection) enumerate.nextElement();578 // 如果忙,�?5 �?579 if (pConn.isBusy()) {580 wait(5000); // �?5 �?581 }582 583 // 5 秒后直接关闭�?584 closeConnection(pConn.getConnection());585 // 从连接池向量中删除它586 connections.removeElement(pConn);587 }588 589 // 置连接池为空590 connections = null;591 }592 593 /**594 * 关闭�?��数据库连�?595 * 596 * @param �?��关闭的数据库连接597 */598 599 private void closeConnection(Connection conn) {600 try {601 conn.close();602 } catch (SQLException e) {603 System.out.println(" 关闭数据库连接出错: " + e.getMessage());604 }605 606 }607 608 /**609 * 使程序等待给定的毫秒�?610 * 611 * @param 给定的毫秒数612 */613 614 private void wait(int mSeconds) {615 try {616 Thread.sleep(mSeconds);617 } catch (InterruptedException e) {618 }619 620 }621 622 /**623 * 返回连接池的初始大小624 * 625 * @return 初始连接池中可获得的连接数量626 */627 628 public int getInitialConnections() {629 return this.initialConnections;630 }631 632 /**633 * 设置连接池的初始大小634 * 635 * @param 用于设置初始连接池中连接的数�?636 */637 638 public void setInitialConnections(int initialConnections) {639 this.initialConnections = initialConnections;640 }641 642 /**643 * 返回连接池自动增加的大小 �?644 * 645 * @return 连接池自动增加的大小646 */647 648 public int getIncrementalConnections() {649 return this.incrementalConnections;650 }651 652 /**653 * 设置连接池自动增加的大小654 * 655 * @param 连接池自动增加的大小656 */657 658 public void setIncrementalConnections(int incrementalConnections) {659 this.incrementalConnections = incrementalConnections;660 }661 662 /**663 * 返回连接池中�?��的可用连接数�?664 * 665 * @return 连接池中�?��的可用连接数�?666 */667 668 public int getMaxConnections() {669 return this.maxConnections;670 }671 672 /**673 * 设置连接池中�?��可用的连接数�?674 * 675 * @param 设置连接池中�?��可用的连接数量�?676 */677 678 public void setMaxConnections(int maxConnections) {679 this.maxConnections = maxConnections;680 }681 682 /**683 * 获取测试数据库表的名�?684 * 685 * @return 测试数据库表的名�?686 */687 688 public String getTestTable() {689 return this.testTable;690 }691 692 /**693 * 设置测试表的名字694 * 695 * @param testTable696 * String 测试表的名字697 */698 699 public void setTestTable(String testTable) {700 this.testTable = testTable;701 }702 703 /**704 * 内部使用的用于保存连接池中连接对象的�?705 * 706 * 此类中有两个成员,一个是数据库的连接,另�?��是指示此连接是否707 * 708 * 正在使用的标志�?709 */710 711 class PooledConnection {712 Connection connection = null;// 数据库连�?713 boolean busy = false; // 此连接是否正在使用的标志,默认没有正在使�?714 // 构�?函数,根据一�?Connection 构告�?�� PooledConnection 对象715 public PooledConnection(Connection connection) {716 this.connection = connection;717 }718 719 // 返回此对象中的连�?720 public Connection getConnection() {721 return connection;722 }723 724 // 设置此对象的,连�?725 726 public void setConnection(Connection connection) {727 this.connection = connection;728 }729 730 // 获得对象连接是否�?731 732 public boolean isBusy() {733 return busy;734 }735 736 // 设置对象的连接正在忙737 738 public void setBusy(boolean busy) {739 this.busy = busy;740 }741 742 }743 744 }

 

配置文件代码

 

1 Db_Type=ORACLE 2  3 #临床路径数据库连接串 4 Cp_Db_ConnString=jdbc:oracle:thin:@127.0.0.1:1521:dbname1 5 Cp_Db_User=user1 6 Cp_Db_Password=psw1 7 Cp_Db_Driver=oracle.jdbc.OracleDriver 8 #his数据库连接串 9 His_Db_ConnString=jdbc:jtds:sqlserver://127.0.0.2;databaseName=dbname210 His_Db_User=user211 His_Db_Password=psw212 His_Db_Driver=net.sourceforge.jtds.jdbc.Driver13 #Emr数据库连接串14 Emr_Db_ConnString=jdbc:oracle:thin:@127.0.0.3:1521:dbname315 Emr_Db_User=user316 Emr_Db_Password=psw317 Emr_Db_Driver=oracle.jdbc.OracleDriver #红色部分为可自定义部分;蓝色部分为固定写法

调用样例

//查询his信息 1 HashMap
> table = CommonFunction.ExecuteQuery(sql, "His"); //插入到临床路径中 2 int x = CommonFunction.ExecuteNonQuery(insertSql, "Cp"); //此处 的His 与Cp即配置文件中所指定的数据库

 

转载于:https://www.cnblogs.com/wuhailong/p/5147238.html

你可能感兴趣的文章
判断数字的正则表达式
查看>>
DOC常用命令(转)
查看>>
php写一个判断是否有cookie的脚本
查看>>
Mac配置Fiddler抓包工具
查看>>
转:Java并发集合
查看>>
Word截图PNG,并压缩图片大小
查看>>
Python项目对接CAS方案
查看>>
mysql产生随机数
查看>>
编程风格
查看>>
熟悉常用的Linux命令
查看>>
易之 - 我是个大师(2014年3月6日)
查看>>
Delphi中窗体的事件
查看>>
file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did
查看>>
Error:Syntax error: redirection unexpected
查看>>
linux vi编辑器
查看>>
js树形结构-----(BST)二叉树增删查
查看>>
contract
查看>>
FJUT ACM 1899 Largest Rectangle in a Histogram
查看>>
如何删除xcode项目中不再使用的图片资源
查看>>
编写用例文档
查看>>