Java数据库连接池(经典)

转载自:http://langzixin.iteye.com/blog/808975

不错的案例,收藏起来,要不时间长了就找不到了

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了富裕免费建站欢迎大家使用!

  1. // 唯一实例  
  2.     /** 
  3.     * 返回唯一实例.如果是第一次调用此方法,则创建实例 
  4.     * 
  5.     * @return DBConnectionManager 唯一实例 
  6.     */  
  7.     /** 
  8.     * 建构函数私有以防止其它对象创建本类实例 
  9.     */  
  10.     /** 
  11.     * 将连接对象返回给由名字指定的连接池 
  12.     * 
  13.     * @param name 在属性文件中定义的连接池名字 
  14.     * @param con 连接对象 
  15.     */  
  16.     /** 
  17.     * 获得一个可用的(空闲的)连接.如果没有可用连接,且已有连接数小于最大连接数 
  18.     * 限制,则创建并返回新连接 
  19.     * 
  20.     * @param name 在属性文件中定义的连接池名字 
  21.     * @return Connection 可用连接或null 
  22.     */  
  23.     /** 
  24.     * 获得一个可用连接.若没有可用连接,且已有连接数小于最大连接数限制, 
  25.     * 则创建并返回新连接.否则,在指定的时间内等待其它线程释放连接. 
  26.     * 
  27.     * @param name 连接池名字 
  28.     * @param time 以毫秒计的等待时间 
  29.     * @return Connection 可用连接或null 
  30.     */  
  31.     /** 
  32.     * 关闭所有连接,撤销驱动程序的注册 
  33.     */  
  34.     // 等待直到最后一个客户程序调用  
  35.     "撤销JDBC驱动程序 " + driver.getClass().getName()+"的注册");  
  36.     }  
  37.     "无法撤销下列JDBC驱动程序的注册: " + driver.getClass().getName());  
  38.     }  
  39.     }  
  40.     }  
  41.   
  42.     /** 
  43.     * 根据指定属性创建连接池实例. 
  44.     * 
  45.     * @param props 连接池属性 
  46.     */  
  47.     ".url")) {  
  48.     String poolName = name.substring("."));  
  49.     String url = props.getProperty(poolName + ".url");  
  50.     "没有为连接池" + poolName + "指定URL");  
  51.     ".user");  
  52.     String password = props.getProperty(poolName + ".password");  
  53.     String maxconn = props.getProperty(poolName + ".maxconn", "0");  
  54.        
  55.     "错误的最大连接数限制: " + maxconn + " .连接池: " + poolName);  
  56.     max = "成功创建连接池" + poolName);  
  57.     }  
  58.     }  
  59.     }  
  60.   
  61.     /** 
  62.     * 读取属性完成初始化 
  63.     */  
  64.     "/db.properties");  
  65.     Properties dbProps = "读取数据成功!");  
  66.     }  
  67.     "不能读取属性文件. " +  
  68.     "请确保db.properties在CLASSPATH指定的路径中");  
  69.     "logfile", "DBConnectionManager.log");  
  70.     System.out.print(logFile);  
  71.     "无法打开日志文件: " + logFile);  
  72.     log = /** 
  73.     * 装载和注册所有JDBC驱动程序 
  74.     * 
  75.     * @param props 属性 
  76.     */  
  77.     "drivers");  
  78.     StringTokenizer st = "成功注册JDBC驱动程序" + driverClassName);  
  79.     }  
  80.     "无法注册JDBC驱动程序: " +  
  81.     driverClassName + ", 错误: " + e);  
  82.     }  
  83.     }  
  84.     }  
  85.   
  86.     /** 
  87.     * 将文本信息写入日志文件 
  88.     */  
  89.     ": " + msg);  
  90.     }  
  91.   
  92.     /** 
  93.     * 将文本信息与异常写入日志文件 
  94.     */  
  95.     ": " + msg);  
  96.     e.printStackTrace(log);  
  97.     }  
  98.   
  99.     /** 
  100.     * 此内部类定义了一个连接池.它能够根据要求创建新连接,直到预定的最 
  101.     * 大连接数为止.在返回连接给客户程序之前,它能够验证连接的有效性. 
  102.     */  
  103.     /** 
  104.     * 创建新的连接池 
  105.     * 
  106.     * @param name 连接池名字 
  107.     * @param URL 数据库的JDBC URL 
  108.     * @param user 数据库帐号,或 null 
  109.     * @param password 密码,或 null 
  110.     * @param maxConn 此连接池允许建立的最大连接数 
  111.     */  
  112.     /** 
  113.     * 将不再使用的连接返回给连接池 
  114.     * 
  115.     * @param con 客户程序释放的连接 
  116.     */  
  117.     // 将指定连接加入到向量末尾  
  118.     freeConnections.addElement(con);  
  119.     checkedOut--;  
  120.     notifyAll();  
  121.     }  
  122.   
  123.     /** 
  124.     * 从连接池获得一个可用连接.如没有空闲的连接且当前连接数小于最大连接 
  125.     * 数限制,则创建新连接.如原来登记为可用的连接不再有效,则从向量删除之, 
  126.     * 然后递归调用自己以尝试新的可用连接. 
  127.     */  
  128.     // 获取向量中第一个可用连接  
  129.     con = (Connection) freeConnections.firstElement();  
  130.     freeConnections.removeElementAt("从连接池" + name+"删除一个无效连接");  
  131.     // 递归调用自己,尝试再次获取可用连接  
  132.     con = getConnection();  
  133.     }  
  134.     }  
  135.     "从连接池" + name+"删除一个无效连接");  
  136.     // 递归调用自己,尝试再次获取可用连接  
  137.     con = getConnection();  
  138.     }  
  139.     }  
  140.     /** 
  141.     * 从连接池获取可用连接.可以指定客户程序能够等待的最长时间 
  142.     * 参见前一个getConnection()方法. 
  143.     * 
  144.     * @param timeout 以毫秒计的等待时间限制 
  145.     */  
  146.     // wait()返回的原因是超时  
  147.     /** 
  148.     * 关闭所有连接 
  149.     */  
  150.     "关闭连接池" + name+"中的一个连接");  
  151.     }  
  152.     "无法关闭连接池" + name+"中的连接");  
  153.     }  
  154.     }  
  155.     freeConnections.removeAllElements();  
  156.     }  
  157.   
  158.     /** 
  159.     * 创建新的连接 
  160.     */  
  161.     "连接池" + name+"创建一个新的连接");  
  162.     }  
  163.     "无法创建下列URL的连接: " + URL);  
  164.     
  165. <%@ page language="java" "java.util.*" pageEncoding="UTF-8"%>  
  166. <%@ page "java.sql.*"%>  
  167. <%@ page "myDB.DBConnectionManager"%>  
  168. <%  
  169. String path = request.getContextPath();  
  170. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  171. %>  
  172.   
  173.   
  174.   
  175.       
  176.         ">  
  177.   
  178.         My JSP 'index.jsp' starting page  
  179.           
  180.           
  181.           
  182.           
  183.           
  184.           
  185.       
  186.   
  187.       
  188.         This is my JSP page.  
  189.         
      
  190. <%  
  191. //单例模式,只是在第一次调用该方法时生成实例,在服务器中该类只保存一个实例  
  192.   out.println("JAVA连接池类测试
    ");  
  193.   Connection con = dbM.getConnection("MySQLdb");//mysqldb是db.properties配置文件中设置的  
  194.   out.print(dbM.getClient());  
  195.   "不能获取数据库连接.");  
  196.    //dbM.release();  
  197.   }  
  198.   "select * from first_table");  
  199.    "
    ");  
  200.    }  
  201.    rs.close();  
  202.    stmt.close();  
  203.    dbM.freeConnection("mysqldb", con);  
  204.      
  205.   }  
  206.     
  207.   Connection oraclecon = dbM.getConnection("oracledb");//oracledb是db.properties配置文件中设置的  
  208.   out.print(dbM.getClient());  
  209.   "不能获取数据库连接.");  
  210.    //dbM.release();  
  211.   }  
  212.   "select * from on_campus_student where rownum<=5");  
  213.    "
    ");  
  214.    }  
  215.    rs.close();  
  216.    stmt.close();  
  217.    dbM.freeConnection("oracledb", oraclecon);  
  218.      
  219.   }  
  220.  } catch (Exception ee)  
  221.  {  
  222.   out.print(ee.getMessage());  
  223.  }  
  224. %>  
  225.       
  226.   

 7、可以方便的获得各种数据库连接(预先在db.properties中配置) 

 

 com.mysql.jdbc.Driver oracle.jdbc.driver.OracleDriver

 

 不同数据库之间用空格隔开即可



分享题目:Java数据库连接池(经典)
网站URL:http://scjbc.cn/article/gcipgo.html

其他资讯