Java实现数据库连接池的代码..docx
《Java实现数据库连接池的代码..docx》由会员分享,可在线阅读,更多相关《Java实现数据库连接池的代码..docx(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、I package com.kyo.connection;23 import java.sql.Connection;4 import j ava.sql.DatabaseMetaData;5 import j ava.sql.Driver;6 import java.sql.DriverManager;7 import java.sql.SQLException;8 import java.sql.Statement;9 import java.util.Enumeration;10 import java.util.Vector;1112 public class ConnectionPo
2、ol 1314 private ConnectionParam param;1516 private String testTable = n n; /测试连接是否可用的测试表名,默认没 有测试表1718 private Vector connections = null; /存放连接池中数据库连接的向量, 初始时为19 / null,它中存放的对象为PooledConnection型2021 public void setParam(ConnectionParam param 22 this.param = param;23 )2425 public ConnectionParam getP
3、aram( (1学科成绩(300分学校可根据每学年期末考试成绩对任教教师进行量化,量化标准如下:优秀率占60分、合格率占120分、学困生率占60分、平均分占60分。计分方法:优秀率得分;班级优秀率/30%*60分合格率得分:班级合格率/90%*120分学困生率得分:(1-班级学困生率/20%) *60分平均分得分:班级平均分/100*60分(五特色工作(加分,遵循教育规律,注重发现和培养学生特长,激发学生潜能,积极组织学生参加 上级教育行政主管部门批准的各级各类竞赛,为学校争得荣誉;教师参加各级举办 的公开课、优质课、教研论文评比活动,在市级以上立项并取得重大成果。指导学生参加各级举办比赛,并
4、获奖,按获奖情况分档计分,相对应班级的班主任加 5%o等级tdp市级县级学区级说明市级以上的以市级为准一等奖1005020加倍计分;他的以人数奖C(六其他工作二等奖804010三等奖50205优秀奖2000公开课、教研论文、优质课、按级别分档计分。等级市级县级学区级说明公开课、优质课、课题一等奖1005040获奖的加倍计分二等奖804020三等奖502010每位教师要积极参加学校组织的集体活动和突击任务工作,根据参加活动的次数、效果 分档计分。出色完成、按时完成、没按时完成但没影响学校工作、特别拖延影响学校工作或没完成 的,分别计20分、分分、0分、-20152 考核结果直接关系到教师的切身利
5、益和教育教学质量的提高。为加强对教师考 核工作的领导,学校成立小学教师综合考核领导小组,校长任组长,要注意总结往 年考核工作的经验,不断完善考核办法,使考核结果符合实际;要坚持公正、公开 的原则,将考核程序、标准和结果及时公布,增强考核工作的透明度;要切实做好 教师的思想工作,教育和引导教师正确认识和对待考核工作,确保考核工作有序进 行。154return conn; /返回创建的新的数据库连接155 )156157158 大159 *通过调用getFreeConnection (函数返回一个可用的数据库连接,160 *161 *如果当前没有可用的数据库连接,并且更多的数据库连接不能创162
6、*163*建(如连接池大小的限制),此函数等待一会再尝试获取。164 165 * return返回一个可用的数据库连接对象166 大/167168 public synchronized Connection getConnection( throws SQLException 169170/确保连接池己被创建1- I if (connections = null 173174175176177178179180181182183184185186187188189190191192193194195196197198199Connection conn = getFreeConnection
7、 (; / 获得个可用的数据库连接/如果目前没有可以使用的连接,即所有的连接都在使用中while (conn = null /等一会再试wait(250;conn = getFreeConnection (; /重新再试,直到获得可用的连接,如果/ getFreeConnection ( 返回的为 null/则表明创建一批连接后也不可获得可用连接return conn;/ 返回获得的可用的连接)/ 大本函数从连接池向量 connections 中返回一个可用的的数据库连接,如果*当前没有可用的数据库连接,本函数则根据 incrementalConnections 设置的值创建几个数据库连接,并
8、放入连接池中。如果创建后,所有的连接仍都在使用中,则返回null201202 private Connection getFreeConnection( throws SQLException203204 /从连接池中获得一个可用的数据库连接205 Connection conn = findFreeConnection(;206 if (conn = null 207 /如果目前连接池中没有可用的连接208 /创建一些连接209 createConnections(this.param.getIncrementaIConnections(;210/重新从池中查找是否有可用连接211 conn
9、 = findFreeConnection (;212 if (conn = null 213/如果创建连接后仍获得不到可用的连接,则返回null214 return null;215 )216 21 return conn;218219 220221 /*222 *223 *查找连接池中所有的连接,查找一个可用的数据库连接,224 *225 *如果没有可用的连接,返回null227 * return返回一个可用的数据库连接228 /229230 private Connection findFreeConnection( throws SQLException 231232 Connecti
10、on conn = null;233 PooledConnection pConn = null;234 /获得连接池向量中所有的对象235 Enumeration enumerate = connections.elements(;236 /遍历所有的对象,看是否有可用的连接二while (enumerate.hasMoreElements( 238 pConn = (PooledConnection enumerate.nextElement(;239 if ( !pConn.isBusy( 240 /如果此对象不忙,则获得它的数据库连接并把它设为忙241 conn = pConn.get
11、Connection(;242 pConn.setBusy(true;243 /测试此连接是否可用244 if (!testconnection(conn 245 /如果此连接不可再用了,则创建一个新的连接,246 /并替换此不可用的连接对象,如果创建失败,返回null247 try 248 conn = newConnection(;249 catch (SQLException e 250 System. out.println(H 创建数据库连接失败! n + e . getMessage (;251 return null;252 )253 pConn.setconnection(co
12、nn;255 break; /己经找到一个可用的连接,退出256 257 )258259 return conn;/ 返回找到到的可用连接260261 )262263 /*264 大265 *测试一个连接是否可用,如果不可用,关掉它并返回 false266 *267 *否则可用返回 true268 *269 *270 大271 大 param conn272 *需要测试的数据库连接273 *274 * Qreturn返回true表示此连接可用,false表示不可用275 */276277 private boolean testConnection (Connection conn 27827
13、9 try (281282283284285286287288289290291292293294295296297298299300301302303304305306307/判断测试表是否存在if (testTable.equals(/如果测试表为空,试着使用此连接的setAutoCommit (方法 /来判断连接否可用(此方法只在部分数据库可用,如果不可用,/抛出异常)。注意:使用测试表的方法更可靠conn , setAutoCommit(true; else /有测试表的时候使用测试表测试/ check if this connection is validStatement stmt
14、 = conn.createStatement(;stmt.execute(nselect count (* from + testTable; ) catch (SQLException e /上面抛出异常,此连接己不可用,关闭它,并返回false;closeConnection (conn;return false;/连接可用,返回truereturn true;)/ *此函数返回一个数据库连接到连接池中,并把此连接置为空闲。*308 大所有使用连接池获得的数据库连接均应在不使用此连接时返回它。309 *310 * param需返回到连接池中的连接对象311 */312;I ; publi
15、c void returnconnection (Connection conn 314315/确保连接池存在,如果连接没有创建(不存在),直接返回3161- if (connections = null 318 System. out .print In (连接池不存在,无法返回此连接到连接池中319 return;320 321322 PooledConnection pConn = null;323 Enumeration enumerate = connections.elements(;324 /遍历连接池中的所有连接,找到这个要返回的连接对象325 while (enumerate
16、.hasMoreElements( 326 pConn = (PooledConnection enumerate.nextElement(;327 /先找到连接池中的要返回的连接对象328 if (conn = pConn.getConnection( 329 /找到了,设置此连接为空闲状态330 pConn.setBusy(false;break;332 )336 )337338/*339 *340 *刷新连接池中所有的连接对象341 大342 *343 */344345 public synchronized void refreshConnections( throws SQLExce
17、ption 346347 /确保连接池己创新存在348 if (connections = null 349 System. out .printIn (连接池不存在,无法刷新! n;350 return;351 352353 PooledConnection pConn = null;354 Enumeration enumerate = connections.elements(;355 while (enumerate.hasMoreElements( 356 /获得一个连接对象357 pConn = (PooledConnection enumerate.nextElement(;35
18、8 /如果对象忙则等5秒,5秒后直接刷新359 if (pConn.isBusy( 360 wait (5000; / 等 5 秒2829 /*30*构造函数31 *32 * param param33 /34 public ConnectionPool(ConnectionParam param35 this.param = param;36 )3738 /丈夫39 *40*获取测试数据库表的名字41 *42 * return测试数据库表的名字43 */4445 public String getTestTable( 46 return this . testTable;47 )4849 /
19、 * *50 *51 *设置测试表的名字53 * param testTable362363 /关闭此连接,用一个新的连接代替它。364 closeConnection(pConn.getConnection(;365 pConn.setConnection(newConnection(;366 pConn.setBusy(false;367 )368369 )370371 /*372 373 *关闭连接池中所有的连接,并清空连接池。374 */375throws376 public synchronized void closeConnectionPool ( SQLException 37
20、7378 /确保连接池存在,如果不存在,返回379 if (connections = null 380 System. out.println(连接池不存在,无法关闭381 return;382 )383 PooledConnection pConn = null;384 Enumeration enumerate = connections.elements(;385 while (enumerate.hasMoreElements( 386 pConn = (PooledConnection enumerate.nextElement(;387 /如果忙,等5秒388 if (pConn
21、.isBusy( 389 wait (5000; / 等 5 秒390 )391 / 5秒后直接关闭它392 closeConnection(pConn.getConnection (;393 /从连接池向量中删除它394 connections.removeElement(pConn;395 )396397 /置连接池为空398 connections = null;399 )400401 /*402 *403 *关闭一个数据库连接404 火405 大 param需要关闭的数据库连接406 */407408 private void closeConnection (Connection c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 实现 数据库连接 代码
限制150内