Java实现数据库连接池的代码_第1页
Java实现数据库连接池的代码_第2页
Java实现数据库连接池的代码_第3页
Java实现数据库连接池的代码_第4页
Java实现数据库连接池的代码_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 2 3 4 5 6 7 8 9 10 11 12 public class ConnectionPool 13 14 private ConnectionParam param; 15 16 private String testTable = "" / 测试连接是否可用的测试表名,默认没有测试表 17 18 private Vector connections = null; / 存放连接池中数据库连接的向量 , 初始时为 19 / null,它中存放的对象为PooledConnection 型 20 21 public void setParam(Connectio

2、nParam param 22 this.param = param; 23 24 25 public ConnectionParam getParam( 26 return param; 27 28 29 /* 30 * 构造函数 31 * 32 * param param 33 */ 34 public ConnectionPool(ConnectionParam param 35 this.param = param; 36 37 38 /* 39 * 40 * 获取测试数据库表的名字 41 * 42 * return 测试数据库表的名字 43 */ 44 45 public Strin

3、g getTestTable( 46 return this.testTable; 47 48 49 /* 50 * 51 * 设置测试表的名字 52 * 53 * param testTable 54 * String 测试表的名字 55 */ 56 57 public void setTestTable(String testTable 58 this.testTable = testTable; 59 60 61 /* 62 * 创建一个数据库连接池,连接池中的可用连接的数量采用类成员 initialConnections 中设置的值 63 */ 64 65 public synchro

4、nized void createPool( throws Exception 66 67 / 确保连接池没有创建 68 / 如果连接池己经创建了,保存连接的向量 connections 不会为空 69 if (connections != null 70 return; / 如果己经创建,则返回 71 72 73 / 实例化 JDBC Driver 中指定的驱动类实例 74 75 .newInstance(; 76 DriverManager.registerDriver(driver; / 注册 JDBC 驱动程序 77 / 创建保存连接的向量 , 初始时有 0 个元素 78 connec

5、tions = new Vector(; 79 80 / 根据 initialConnections 中设置的值,创建连接。 81 createConnections(this.param.getMinConnection(; 82 83 84 85 86 /* 87 * 88 * 创建由 numConnections 指定数目的数据库连接 , 并把这些连接 放入 connections 向量中 89 * 90 * param numConnections 91 * 要创建的数据库连接的数目 92 */ 93 94 private void createConnections(int numC

6、onnections throws SQLException 95 96 / 循环创建指定数目的数据库连接 97 for (int x = 0; x < numConnections; x+ 98 / 是否连接池中的数据库连接的数量己经达到最大?最大值由类成员 maxConnections,指出,如果 maxConnections 99 / 为 0 或负数,表示连接数量没有限制。 100 / 如果连接数己经达到最大,即退出。 101 102 103 104 break; 105 106 107 / add a new PooledConnection object to connecti

7、ons vector 108 / 增加一个连接到连接池中(向量 connections 中) 109 try 110 connections.addElement(new PooledConnection(newConnection(; 111 catch (SQLException e 112 创建数据库连接失败! " + e.getMessage(; 113 throw new SQLException(; 114 115 116 数据库连接己创建 ." 117 118 119 120 121 /* 122 * 123 * 创建一个新的数据库连接并返回它 124 * 1

8、25 * return 返回一个新创建的数据库连接 126 */ 127 128 private Connection newConnection( throws SQLException 129 130 / 创建一个数据库连接 131 Connection conn = DriverManager.getConnection(this.param.getUrl(, 132 this.param.getUser(, this.param.getPassword(; 133 134 / 如果这是第一次创建数据库连接,即检查数据库,获得此数据库允许支持的 135 / 最大客户连接数目 136 /

9、connections.size(=0 表示目前没有连接己被创建 137 138 if (connections.size( = 0 139 140 DatabaseMetaData metaData = conn.getMetaData(; 141 int driverMaxConnections = metaData.getMaxConnections(; 142 143 / 数据库返回的 driverMaxConnections 若为 0 ,表示此数据库没有最大 144 / 连接限制,或数据库的最大连接限制不知道 145 / driverMaxConnections 为返回的一个整数,表

10、示此数据库允许客户连接的数 目 146 / 如果连接池中设置的最大连接数量大于数据库允许的连接数目 , 则置连接池 的最大 147 / 连接数目为数据库允许的最大数目 148 149 if (driverMaxConnections > 0 150 && this.param.getMaxConnection( > driverMaxConnections 教师教育教学工作综合考核评价方案    为进一步深化学校管理体制改革,引导和激励广大教师更加爱岗敬业、无私奉献,不断增强工作、学习的积极性和主动性,特制定教师教育教学工作综合考核评价

11、方案。    一、考核对象   在职在岗的全体教师。    二、考核内容及方法考核从道德规范、教学常规、研究与提高、教育教学效果、特色工作等方面进行考核,总分800分(不包括加分。(一道德规范(100分    1政治表现(5分    认真学习党的路线、方针、政策,自觉抵制各种错误思潮和腐朽思想文化的影响;在大是大非问题上,立场坚定,旗帜鲜明。    2师德素养(10分    遵守教师职业

12、道德,为人师表,举止文明端庄;团结同志,顾全大局,服从领导,关心集体,维护学校荣誉;公正、公平、严谨客观地行使监督评议职责,以自己良好的思想和道德风范去影响和培养学生。   3遵纪守法(5分遵守国家法律法规,遵守学校规章制度,以良好的思想政治素质影响和引领学生,不准单纯以学习成绩评价学生,不耻视、不排除差生。    4出勤(80分遵守学校作息时间,遵守学校工作纪律。旷课1节扣10分,无请假或临时请假(特殊情况除外)事假半天、会议扣3分,事假半天扣2分,病假1天扣1分(住院期间不扣分),迟到、早退(包括会议、活动、上课)1次扣1分。 &

13、#160;  (二教学常规(300分1计划、总结(10分    教学教研计划应符合学情、教情,符合课改新理念;教学总结应对典型课例、教学方法、教学能力、学法指导等教学行为进行深刻的反思。    2备课(100分按校教学管理备课要求执行课前必须写好教案,教案目标明确,重点难点突出,教学过程完整,各课课时达到规定要求。*目标明确,重点难点突出,教学过程完整:完成95%、80%、60%和60%以下的分别计100分、90分、80分和60-30分*课时超2-5课时、刚好、缺5课时以内、缺5课时以外的分别计100分、90分、80分和60

14、-30分    按备课的常规要求进行计分,平时检查和期末检查相结合,以上两项以百分比相乘结果进行分档计分。     3课堂教学(90分    按校教学管理课堂教学要求执行。    以90分、80分、60分进行分档计分。    4作业批改(100分, 以40-48人为准,每超或少1人加或减1个百分点    按校教学管理作业要求执行。采取抽查作业和调查了解的办法进行评估。可以从作业数量、质量、批改分析记录和分层作业等几个

15、方面评估分优、良、中、差。平时检查占50,期末检查占50。    (三研究与提高(100分    1教材研究(50分每位教师每学期至少要上一节校级研讨课10分,课后反思按要求完成的得10分,每缺一份少1分    2培训提高(50分    (1听课评课(25分积极参加听课评课活动。听课记录要反映教学过程,对授课教师对教材教法的理解与使用,对学生学法的指导和学习策略的培养等项目进行评价,对所听的课提出自己的意见和建议。每学期至少听课20节(完整一节记录得1分,最高20分),(2业

16、务学习(1O分   积极参加教研组、备课组组织的各种业务活动。     (3现代教育技术掌握水平(10分    充分利用现代教育技术辅助教学,能够熟练地使用学校现有的现代化教学器材。    学校对教师使用现代教育技术的情况作好记录,按教师使用次数的多少和熟练程度分档计分。     (四教育教学效果(300分, 以40-48人为准,每超或少1人加或减1个百分点    1德育工作(在班主任考核方案中记分 

17、60;  所有班级任课教师都是德育工作的主体,既教书又育人;把德育工作渗透到日常管理和教育教学中;有健康的兴趣爱好和良好的行为习惯,班风正、学风浓,无违法犯罪现象。    2学生综合素质(300分   (1学科成绩(300分    学校可根据每学年期末考试成绩对任教教师进行量化,量化标准如下:   优秀率占60分、合格率占120分、学困生率占60分、平均分占60分。计分方法:优秀率得分;班级优秀率/30%*60分合格率得分:班级合格率/90%*120分学困生率得分:(1-班级

18、学困生率/20%)*60分平均分得分:班级平均分/100*60分    (五特色工作(加分,     遵循教育规律,注重发现和培养学生特长,激发学生潜能,积极组织学生参加上级教育行政主管部门批准的各级各类竞赛,为学校争得荣誉;教师参加各级举办的公开课、优质课、教研论文评比活动,在市级以上立项并取得重大成果。指导学生参加各级举办比赛,并获奖,按获奖情况分档计分,相对应班级的班主任加5%。等级td p市级县级学区级说明一等奖1005020市级以上的以市级为准加倍计分;他的以人数奖。二等奖804010三等奖50205优秀奖2000公开课、教

19、研论文、优质课、按级别分档计分。等级市级县级学区级说明一等奖1005040公开课、优质课、课题获奖的加倍计分二等奖804020三等奖502010    (六其他工作每位教师要积极参加学校组织的集体活动和突击任务工作,根据参加活动的次数、效果分档计分。出色完成、按时完成、没按时完成但没影响学校工作、特别拖延影响学校工作或没完成的,分别计20分、10分、0分、-20152  153考核结果直接关系到教师的切身利益和教育教学质量的提高。为加强对教师考核工作的领导,学校成立小学教师综合考核领导小组,校长任组长,要注意总结往年考核工作的经验,不断完善考核办法,使考

20、核结果符合实际;要坚持公正、公开的原则,将考核程序、标准和结果及时公布,增强考核工作的透明度;要切实做好教师的思想工作,教育和引导教师正确认识和对待考核工作,确保考核工作有序进行。154 return conn; / 返回创建的新的数据库连接 155 156 157 /* 158 * 159 * 通过调用 getFreeConnection( 函数返回一个可用的数据库连接 , 160 * 161 * 如果当前没有可用的数据库连接,并且更多的数据库连接不能创 162 * 163 * 建(如连接池大小的限制),此函数等待一会再尝试获取。 164 * 165 * return 返回一个可用的数据库连

21、接对象 166 */ 167 168 public synchronized Connection getConnection( throws SQLException 169 170 / 确保连接池己被创建 171 if (connections = null 172 return null; / 连接池还没创建,则返回 null 173 174 175 Connection conn = getFreeConnection(; / 获得一个可用的数据库连接 176 / 如果目前没有可以使用的连接,即所有的连接都在使用中 177 178 while (conn = null 179 / 等一

22、会再试 180 wait(250; 181 conn = getFreeConnection(; / 重新再试,直到获得可用的连接,如果 182 / getFreeConnection( 返回的为 null 183 / 则表明创建一批连接后也不可获得可用连接 184 185 186 return conn;/ 返回获得的可用的连接 187 188 189 /* 190 * 191 * 本函数从连接池向量 connections 中返回一个可用的的数据库连接,如果 192 * 193 * 当前没有可用的数据库连接,本函数则根据 incrementalConnections 设置 194 * 19

23、5 * 的值创建几个数据库连接,并放入连接池中。 196 * 197 * 如果创建后,所有的连接仍都在使用中,则返回 null 198 * 199 * return 返回一个可用的数据库连接 200 */ 201 202 private Connection getFreeConnection( throws SQLException 203 204 / 从连接池中获得一个可用的数据库连接 205 Connection conn = findFreeConnection(; 206 if (conn = null 207 / 如果目前连接池中没有可用的连接 208 / 创建一些连接 209 2

24、10 / 重新从池中查找是否有可用连接 211 conn = findFreeConnection(; 212 if (conn = null 213 / 如果创建连接后仍获得不到可用的连接,则返回 null 214 return null; 215 216 217 return conn; 218 219 220 221 /* 222 * 223 * 查找连接池中所有的连接,查找一个可用的数据库连接, 224 * 225 * 如果没有可用的连接,返回 null 226 * 227 * return 返回一个可用的数据库连接 228 */ 229 230 private Connection

25、findFreeConnection( throws SQLException 231 232 Connection conn = null; 233 PooledConnection pConn = null; 234 / 获得连接池向量中所有的对象 235 Enumeration enumerate = connections.elements(; 236 / 遍历所有的对象,看是否有可用的连接 237 while (enumerate.hasMoreElements( 238 pConn = (PooledConnection enumerate.nextElement(; 239 if

26、 (!pConn.isBusy( 240 / 如果此对象不忙,则获得它的数据库连接并把它设为忙 241 conn = pConn.getConnection(; 242 pConn.setBusy(true; 243 / 测试此连接是否可用 244 if (!testConnection(conn 245 / 如果此连接不可再用了,则创建一个新的连接, 246 / 并替换此不可用的连接对象,如果创建失败,返回 null 247 try 248 conn = newConnection(; 249 catch (SQLException e 250 创建数据库连接失败! " + e.g

27、etMessage(; 251 return null; 252 253 pConn.setConnection(conn; 254 255 break; / 己经找到一个可用的连接,退出 256 257 258 259 return conn;/ 返回找到到的可用连接 260 261 262 263 /* 264 * 265 * 测试一个连接是否可用,如果不可用,关掉它并返回 false 266 * 267 * 否则可用返回 true 268 * 269 * 270 * 271 * param conn 272 * 需要测试的数据库连接 273 * 274 * return 返回 true

28、表示此连接可用, false 表示不可用 275 */ 276 277 private boolean testConnection(Connection conn 278 279 try 280 281 / 判断测试表是否存在 282 if (testTable.equals("" 283 / 如果测试表为空,试着使用此连接的 setAutoCommit( 方法 284 / 来判断连接否可用(此方法只在部分数据库可用,如果不可用 , 285 / 抛出异常)。注意:使用测试表的方法更可靠 286 conn.setAutoCommit(true; 287 else 288 /

29、 有测试表的时候使用测试表测试 289 / check if this connection is valid 290 Statement stmt = conn.createStatement(; 291 stmt.execute("select count(* from " + testTable; 292 293 294 catch (SQLException e 295 / 上面抛出异常,此连接己不可用,关闭它,并返回 false; 296 closeConnection(conn; 297 return false; 298 299 / 连接可用,返回 true

30、300 return true; 301 302 303 304 /* 305 * 306 * 此函数返回一个数据库连接到连接池中,并把此连接置为空闲。 307 * 308 * 所有使用连接池获得的数据库连接均应在不使用此连接时返回它。 309 * 310 * param 需返回到连接池中的连接对象 311 */ 312 313 public void returnConnection(Connection conn 314 315 / 确保连接池存在,如果连接没有创建(不存在),直接返回 316 317 if (connections = null 318 319 return; 320 3

31、21 322 PooledConnection pConn = null; 323 Enumeration enumerate = connections.elements(; 324 / 遍历连接池中的所有连接,找到这个要返回的连接对象 325 while (enumerate.hasMoreElements( 326 pConn = (PooledConnection enumerate.nextElement(; 327 / 先找到连接池中的要返回的连接对象 328 if (conn = pConn.getConnection( 329 / 找到了 , 设置此连接为空闲状态 330 pC

32、onn.setBusy(false; 331 break; 332 333 334 335 336 337 338 /* 339 * 340 * 刷新连接池中所有的连接对象 341 * 342 * 343 */ 344 345 public synchronized void refreshConnections( throws SQLException 346 347 / 确保连接池己创新存在 348 if (connections = null 349 连接池不存在,无法刷新 !" 350 return; 351 352 353 PooledConnection pConn =

33、null; 354 Enumeration enumerate = connections.elements(; 355 while (enumerate.hasMoreElements( 356 / 获得一个连接对象 357 pConn = (PooledConnection enumerate.nextElement(; 358 / 如果对象忙则等 5 秒 ,5 秒后直接刷新 359 if (pConn.isBusy( 360 wait(5000; / 等 5 秒 361 362 363 / 关闭此连接,用一个新的连接代替它。 364 closeConnection(pConn.getCo

34、nnection(; 365 pConn.setConnection(newConnection(; 366 pConn.setBusy(false; 367 368 369 370 371 /* 372 * 373 * 关闭连接池中所有的连接,并清空连接池。 374 */ 375 376 public synchronized void closeConnectionPool( throws SQLException 377 378 / 确保连接池存在,如果不存在,返回 379 if (connections = null 380 连接池不存在,无法关闭 !" 381 return

35、; 382 383 PooledConnection pConn = null; 384 Enumeration enumerate = connections.elements(; 385 while (enumerate.hasMoreElements( 386 pConn = (PooledConnection enumerate.nextElement(; 387 / 如果忙,等 5 秒 388 if (pConn.isBusy( 389 wait(5000; / 等 5 秒 390 391 / 5 秒后直接关闭它 392 closeConnection(pConn.getConnec

36、tion(; 393 / 从连接池向量中删除它 394 connections.removeElement(pConn; 395 396 397 / 置连接池为空 398 connections = null; 399 400 401 /* 402 * 403 * 关闭一个数据库连接 404 * 405 * param 需要关闭的数据库连接 406 */ 407 408 private void closeConnection(Connection conn 409 try 410 conn.close(; 411 catch (SQLException e 412 413 414 415 4

37、16 /* 417 * 418 * 使程序等待给定的毫秒数 419 * 420 * param 给定的毫秒数 421 */ 422 423 private void wait(int mSeconds 424 try 425 Thread.sleep(mSeconds; 426 catch (InterruptedException e 427 428 429 430 /* 431 * 432 * 内部使用的用于保存连接池中连接对象的类 此类中有两个成员,一个是数据库的连接,另一个是指示此连接是否 正在使用的标志。 433 */ 434 435 class PooledConnection 4

38、36 437 Connection connection = null;/ 数据库连接 438 439 boolean busy = false; / 此连接是否正在使用的标志,默认没有正在使用 440 441 / 构造函数,根据一个 Connection 构告一个 PooledConnection 对象 442 public PooledConnection(Connection connection 443 this.connection = connection; 444 445 446 / 返回此对象中的连接 447 public Connection getConnection( 4

39、48 return connection; 449 450 451 / 设置此对象的,连接 452 public void setConnection(Connection connection 453 this.connection = connection; 454 455 456 / 获得对象连接是否忙 457 public boolean isBusy( 458 return busy; 459 460 461 / 设置对象的连接正在忙 462 public void setBusy(boolean busy 463 this.busy = busy; 464 465 466 467

40、ConnectionParam.javaJava代码 468 package469 470 import471 472 /* 473 * author niudongjie.pt 数据库连接池参数 474 */ 475 public class ConnectionParam implements Serializable 476 477 /* 478 * 479 */ 480 private static final long serialVersionUID = 1L; 481 482 private String driver; / 数据库连接驱动 483 private String

41、url; / 数据库连接URL 484 private String user; / 数据库连接user 485 private String password; / 数据库连接password 486 private int minConnection; / 数据库连接池最小连接数 487 private int maxConnection; / 数据库连接池最大连接数 488 private long timeoutValue; / 连接的最大空闲时间 489 private long waitTime; / 取得连接的最大等待时间 490 private int incrementalConnections=5; /连接池自动增

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论