Java数据库连接池 .pdf
《Java数据库连接池 .pdf》由会员分享,可在线阅读,更多相关《Java数据库连接池 .pdf(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java 数据库连接池虽然现在用 APACHE COMMONS DBCP可以非常方便的建立数据库连接池,但是像这篇文章把数据库连接池的内部原理写的这么透彻,注视这么完整,真是非常难得,让开发人员可以更深层次的理解数据库连接池,真是非常感谢这篇文章的作者。import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.Driver;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;impor
2、t java.util.Enumeration;import java.util.Vector;public class ConnectionPool private String jdbcDriver=;/数据库驱动private String dbUrl=;/数据 URL 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 40 页 -private String dbUsername=;/数据库用户名private String dbPassword=;/数据库用户密码private String testTable=;/测试连接是否可用的测试表名,默认没有测试表private
3、 int initialConnections=10;/连接池的初始大小private int incrementalConnections=5;/连接池自动增加的大小private int maxConnections=50;/连接池最大的大小private Vector connections=null;/存放连接池中数据库连接的向量,初始时为null/它中存放的对象为PooledConnection 型/*构造函数名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 40 页 -*param jdbcDriver String JDBC 驱动类串*param dbUrl Stri
4、ng 数据库URL*param dbUsername String 连接数据库用户名*param dbPassword String 连接数据库用户的密码*/public ConnectionPool(String jdbcDriver,String dbUrl,String dbUsername,String dbPassword)this.jdbcDriver=jdbcDriver;this.dbUrl=dbUrl;this.dbUsername=dbUsername;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 40 页 -this.dbPassword=dbPasswo
5、rd;/*返回连接池的初始大小*return 初始连接池中可获得的连接数量*/public int getInitialConnections()return this.initialConnections;/*名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 40 页 -*设置连接池的初始大小*param 用于设置初始连接池中连接的数量*/public void setInitialConnections(int initialConnections)this.initialConnections=initialConnections;/*返回连接池自动增加的大小、*return
6、 连接池自动增加的大小名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 40 页 -*/public int getIncrementalConnections()return this.incrementalConnections;/*设置连接池自动增加的大小*param 连接池自动增加的大小*/public void setIncrementalConnections(int incrementalConnections)this.incrementalConnections=incrementalConnections;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页
7、,共 40 页 -/*返回连接池中最大的可用连接数量*return 连接池中最大的可用连接数量*/public int getMaxConnections()return this.maxConnections;/*设置连接池中最大可用的连接数量*名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 40 页 -*param 设置连接池中最大可用的连接数量值*/public void setMaxConnections(int maxConnections)this.maxConnections=maxConnections;/*获取测试数据库表的名字*return 测试数据库表的名字
8、*/public String getTestTable()名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 40 页 -return this.testTable;/*设置测试表的名字*param testTable String 测试表的名字*/public void setTestTable(String testTable)this.testTable=testTable;/*名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 40 页 -*创建一个数据库连接池,连接池中的可用连接的数量采用类成员*initialConnections 中设置的值*/public
9、synchronized void createPool()throws Exception /确保连接池没有创建/如果连接池己经创建了,保存连接的向量connections 不会为空if(connections!=null)return;/如果己经创建,则返回/实例化 JDBC Driver 中指定的驱动类实例Driver driver=(Driver)名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 40 页 -(Class.forName(this.jdbcDriver).newInstance();DriverManager.registerDriver(driver);
10、/注册 JDBC 驱动程序/创建保存连接的向量,初始时有0 个元素connections=new Vector();/根据 initialConnections 中设置的值,创建连接。createConnections(this.initialConnections);System.out.println(数据库连接池创建成功!);/*创建由 numConnections 指定数目的数据库连接,并把这些连接名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 40 页 -*放入 connections 向量中*param numConnections 要创建的数据库连接的数目*/Su
11、ppressWarnings(unchecked)private void createConnections(int numConnections)throws SQLException /循环创建指定数目的数据库连接for(int x=0;x 0&this.connections.size()=this.maxConnections)break;/add a new PooledConnection object to connections vector/增加一个连接到连接池中(向量connections 中)try connections.addElement(new PooledCo
12、nnection(newConnection();catch(SQLException e)System.out.println(创建数据库连接失败!+e.getMessage();名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 40 页 -throw new SQLException();System.out.println(数据库连接己创建 .);/*创建一个新的数据库连接并返回它*return 返回一个新创建的数据库连接*/private Connection newConnection()throws SQLException 名师资料总结-精品资料欢迎下载-名师精心整
13、理-第 14 页,共 40 页 -/创建一个数据库连接Connection conn=DriverManager.getConnection(dbUrl,dbUsername,dbPassword);/如果这是第一次创建数据库连接,即检查数据库,获得此数据库允许支持的/最大客户连接数目/connections.size()=0 表示目前没有连接己被创建if(connections.size()=0)DatabaseMetaData metaData=conn.getMetaData();int driverMaxConnections=metaData.getMaxConnections();
14、/数据库返回的driverMaxConnections 若为 0,表示此数据库没有最大名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 40 页 -/连接限制,或数据库的最大连接限制不知道/driverMaxConnections 为返回的一个整数,表示此数据库允许客户连接的数目/如果连接池中设置的最大连接数量大于数据库允许的连接数目,则置连接池的最大/连接数目为数据库允许的最大数目if(driverMaxConnections 0&this.maxConnections driverMaxConnections)this.maxConnections=driverMaxConn
15、ections;return conn;/返回创建的新的数据库连接 名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 40 页 -/*通过调用getFreeConnection()函数返回一个可用的数据库连接,*如果当前没有可用的数据库连接,并且更多的数据库连接不能创*建(如连接池大小的限制),此函数等待一会再尝试获取。*return 返回一个可用的数据库连接对象*/public synchronized Connection getConnection()throws SQLException /确保连接池己被创建if(connections=null)名师资料总结-精品资料欢
16、迎下载-名师精心整理-第 17 页,共 40 页 -return null;/连接池还没创建,则返回null Connection conn=getFreeConnection();/获得一个可用的数据库连接/如果目前没有可以使用的连接,即所有的连接都在使用中while(conn=null)/等一会再试wait(250);conn=getFreeConnection();/重新再试,直到获得可用的连接,如果/getFreeConnection()返回的为null/则表明创建一批连接后也不可获得可用连接名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 40 页 -return co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java数据库连接池 2022 Java 数据库连接
限制150内