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

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

//唯一实例/***返回唯一实例.如果是第一次调用此方法,则创建实例**@returnDBConnectionManager唯一实例*//***建构函数私有以防止其它对象创建本类实例*//***将连接对象返回给由名字指定的连接池**@paramname在属性文件中定义的连接池名字*@paramcon连接对象*//***获得一个可用的(空闲的)连接.如果没有可用连接,且已有连接数小于最大连接数*限制,则创建并返回新连接**@paramname在属性文件中定义的连接池名字*@returnConnection可用连接或null*//***获得一个可用连接.若没有可用连接,且已有连接数小于最大连接数限制,*则创建并返回新连接.否则,在指定的时间内等待其它线程释放连接.**@paramname连接池名字*@paramtime以毫秒计的等待时间*@returnConnection可用连接或null*//***关闭所有连接,撤销驱动程序的注册*///等待直到最后一个客户程序调用"撤销JDBC驱动程序"+driver.getClass().getName()+"的注册");}"无法撤销下列JDBC驱动程序的注册:"+driver.getClass().getName());}}}/***根据指定属性创建连接池实例.**@paramprops连接池属性*/".url")){StringpoolName=name.substring("."));Stringurl=props.getProperty(poolName+".url");"没有为连接池"+poolName+"指定URL");".user");Stringpassword=props.getProperty(poolName+".password");Stringmaxconn=props.getProperty(poolName+".maxconn","0");"错误的最大连接数限制:"+maxconn+".连接池:"+poolName);max="成功创建连接池"+poolName);}}}/***读取属性完成初始化*/"/db.properties");PropertiesdbProps="读取数据成功!");}"不能读取属性文件."+"请确保db.properties在CLASSPATH指定的路径中");"logfile","DBConnectionManager.log");System.out.print(logFile);"无法打开日志文件:"+logFile);log=/***装载和注册所有JDBC驱动程序**@paramprops属性*/"drivers");StringTokenizerst="成功注册JDBC驱动程序"+driverClassName);}"无法注册JDBC驱动程序:"+driverClassName+",错误:"+e);}}}/***将文本信息写入日志文件*/":"+msg);}/***将文本信息与异常写入日志文件*/":"+msg);e.printStackTrace(log);}/***此内部类定义了一个连接池.它能够根据要求创建新连接,直到预定的最*大连接数为止.在返回连接给客户程序之前,它能够验证连接的有效性.*//***创建新的连接池**@paramname连接池名字*@paramURL数据库的JDBCURL*@paramuser数据库帐号,或null*@parampassword密码,或null*@parammaxConn此连接池允许建立的最大连接数*//***将不再使用的连接返回给连接池**@paramcon客户程序释放的连接*///将指定连接加入到向量末尾freeConnections.addElement(con);checkedOut--;notifyAll();}/***从连接池获得一个可用连接.如没有空闲的连接且当前连接数小于最大连接*数限制,则创建新连接.如原来登记为可用的连接不再有效,则从向量删除之,*然后递归调用自己以尝试新的可用连接.*///获取向量中第一个可用连接con=(Connection)freeConnections.firstElement();freeConnections.removeElementAt("从连接池"+name+"删除一个无效连接");//递归调用自己,尝试再次获取可用连接con=getConnection();}}"从连接池"+name+"删除一个无效连接");//递归调用自己,尝试再次获取可用连接con=getConnection();}}/***从连接池获取可用连接.可以指定客户程序能够等待的最长时间*参见前一个getConnection()方法.**@paramtimeout以毫秒计的等待时间限制*///wait()返回的原因是超时/***关闭所有连接*/"关闭连接池"+name+"中的一个连接");}"无法关闭连接池"+name+"中的连接");}}freeConnections.removeAllElements();}/***创建新的连接*/"连接池"+name+"创建一个新的连接");}"无法创建下列URL的连接:"+URL);<%@pagelanguage="java""java.util.*"pageEncoding="UTF-8"%><%@page"java.sql.*"%><%@page"myDB.DBConnectionManager"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><basehref="<%=basePath%>"><title>MyJSP'index.jsp'startingpage</title><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"><!--<linkrel="stylesheet"type="text/css"href="styles.css">--></head><body>ThisismyJSPpage.<br><%//单例模式,只是在第一次调用该方法时生成实例,在服务器中该类只保存一个实例out.println("JAVA连接池类测试<br/>");Connectioncon=dbM.getConnection("mysqldb");//mysqldb是db.properties配置文件中设置的out.print(dbM.getClient());"不能获取数据库连接.");//dbM.release();}"select*fromfirst_table");"<br/>");}rs.close();stmt.close();dbM.freeConnection("mysqldb",con);}Connectionoraclecon=dbM.getConnection("oracledb");//oracledb是db.properties配置文件中设置的out.print(dbM.getClient());"不能获取数据库连接.");//dbM.release();}"select*fromon_campus_studentwhererownum<=5");"<br/>");}rs.close();stmt.close();dbM.freeConnection("oracledb",oraclecon);}}catch(Exceptionee){out.print(ee.getMessage());}%></body></html>

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

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

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