Java数据库连接池(经典)
转载自:http://langzixin.iteye.com/blog/808975
不错的案例,收藏起来,要不时间长了就找不到了
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了富裕免费建站欢迎大家使用!
- // 唯一实例
- /**
- * 返回唯一实例.如果是第一次调用此方法,则创建实例
- *
- * @return DBConnectionManager 唯一实例
- */
- /**
- * 建构函数私有以防止其它对象创建本类实例
- */
- /**
- * 将连接对象返回给由名字指定的连接池
- *
- * @param name 在属性文件中定义的连接池名字
- * @param con 连接对象
- */
- /**
- * 获得一个可用的(空闲的)连接.如果没有可用连接,且已有连接数小于最大连接数
- * 限制,则创建并返回新连接
- *
- * @param name 在属性文件中定义的连接池名字
- * @return Connection 可用连接或null
- */
- /**
- * 获得一个可用连接.若没有可用连接,且已有连接数小于最大连接数限制,
- * 则创建并返回新连接.否则,在指定的时间内等待其它线程释放连接.
- *
- * @param name 连接池名字
- * @param time 以毫秒计的等待时间
- * @return Connection 可用连接或null
- */
- /**
- * 关闭所有连接,撤销驱动程序的注册
- */
- // 等待直到最后一个客户程序调用
- "撤销JDBC驱动程序 " + driver.getClass().getName()+"的注册");
- }
- "无法撤销下列JDBC驱动程序的注册: " + driver.getClass().getName());
- }
- }
- }
- /**
- * 根据指定属性创建连接池实例.
- *
- * @param props 连接池属性
- */
- ".url")) {
- String poolName = name.substring("."));
- String url = props.getProperty(poolName + ".url");
- "没有为连接池" + poolName + "指定URL");
- ".user");
- String password = props.getProperty(poolName + ".password");
- String maxconn = props.getProperty(poolName + ".maxconn", "0");
- "错误的最大连接数限制: " + maxconn + " .连接池: " + poolName);
- max = "成功创建连接池" + poolName);
- }
- }
- }
- /**
- * 读取属性完成初始化
- */
- "/db.properties");
- Properties dbProps = "读取数据成功!");
- }
- "不能读取属性文件. " +
- "请确保db.properties在CLASSPATH指定的路径中");
- "logfile", "DBConnectionManager.log");
- System.out.print(logFile);
- "无法打开日志文件: " + logFile);
- log = /**
- * 装载和注册所有JDBC驱动程序
- *
- * @param props 属性
- */
- "drivers");
- StringTokenizer st = "成功注册JDBC驱动程序" + driverClassName);
- }
- "无法注册JDBC驱动程序: " +
- driverClassName + ", 错误: " + e);
- }
- }
- }
- /**
- * 将文本信息写入日志文件
- */
- ": " + msg);
- }
- /**
- * 将文本信息与异常写入日志文件
- */
- ": " + msg);
- e.printStackTrace(log);
- }
- /**
- * 此内部类定义了一个连接池.它能够根据要求创建新连接,直到预定的最
- * 大连接数为止.在返回连接给客户程序之前,它能够验证连接的有效性.
- */
- /**
- * 创建新的连接池
- *
- * @param name 连接池名字
- * @param URL 数据库的JDBC URL
- * @param user 数据库帐号,或 null
- * @param password 密码,或 null
- * @param maxConn 此连接池允许建立的最大连接数
- */
- /**
- * 将不再使用的连接返回给连接池
- *
- * @param con 客户程序释放的连接
- */
- // 将指定连接加入到向量末尾
- freeConnections.addElement(con);
- checkedOut--;
- notifyAll();
- }
- /**
- * 从连接池获得一个可用连接.如没有空闲的连接且当前连接数小于最大连接
- * 数限制,则创建新连接.如原来登记为可用的连接不再有效,则从向量删除之,
- * 然后递归调用自己以尝试新的可用连接.
- */
- // 获取向量中第一个可用连接
- con = (Connection) freeConnections.firstElement();
- freeConnections.removeElementAt("从连接池" + name+"删除一个无效连接");
- // 递归调用自己,尝试再次获取可用连接
- con = getConnection();
- }
- }
- "从连接池" + name+"删除一个无效连接");
- // 递归调用自己,尝试再次获取可用连接
- con = getConnection();
- }
- }
- /**
- * 从连接池获取可用连接.可以指定客户程序能够等待的最长时间
- * 参见前一个getConnection()方法.
- *
- * @param timeout 以毫秒计的等待时间限制
- */
- // wait()返回的原因是超时
- /**
- * 关闭所有连接
- */
- "关闭连接池" + name+"中的一个连接");
- }
- "无法关闭连接池" + name+"中的连接");
- }
- }
- freeConnections.removeAllElements();
- }
- /**
- * 创建新的连接
- */
- "连接池" + name+"创建一个新的连接");
- }
- "无法创建下列URL的连接: " + URL);
- <%@ page language="java" "java.util.*" pageEncoding="UTF-8"%>
- <%@ page "java.sql.*"%>
- <%@ page "myDB.DBConnectionManager"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
-
"> -
My JSP 'index.jsp' starting page - This is my JSP page.
-
- <%
- //单例模式,只是在第一次调用该方法时生成实例,在服务器中该类只保存一个实例
-
out.println("JAVA连接池类测试
"); - Connection con = dbM.getConnection("MySQLdb");//mysqldb是db.properties配置文件中设置的
- out.print(dbM.getClient());
- "不能获取数据库连接.");
- //dbM.release();
- }
- "select * from first_table");
-
"
"); - }
- rs.close();
- stmt.close();
- dbM.freeConnection("mysqldb", con);
- }
- Connection oraclecon = dbM.getConnection("oracledb");//oracledb是db.properties配置文件中设置的
- out.print(dbM.getClient());
- "不能获取数据库连接.");
- //dbM.release();
- }
- "select * from on_campus_student where rownum<=5");
-
"
"); - }
- rs.close();
- stmt.close();
- dbM.freeConnection("oracledb", oraclecon);
- }
- } catch (Exception ee)
- {
- out.print(ee.getMessage());
- }
- %>
7、可以方便的获得各种数据库连接(预先在db.properties中配置)
com.mysql.jdbc.Driver oracle.jdbc.driver.OracleDriver
不同数据库之间用空格隔开即可
文章题目:Java数据库连接池(经典)
链接URL:http://scyanting.com/article/gcipgo.html