自定义数据连接池

来源:互联网 发布:淘宝客托管 编辑:程序博客网 时间:2024/05/20 11:32
package com.ghsy.mypool;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.LinkedList;import java.util.ResourceBundle;public class MyJdbcUtilsPool {//声明一个连接池对象-用linkedListprivate static LinkedList<Connection> pool=new LinkedList<Connection>();//初始化连接池-将多个连接放入连接池中static{//获取连接-根据properties文件获取连接,直接用JdbcUtils类//0.通过资源束对象获取properties文件中的数据库连接的配置信息ResourceBundle resourceBundle=ResourceBundle.getBundle("jdbcinfo");//只需要文件名,无需扩展名String driver=resourceBundle.getString("driver");String url=resourceBundle.getString("url");String user=resourceBundle.getString("user");String password=resourceBundle.getString("password");try {//1.注册驱动Class.forName(driver);System.out.println("池中初始化的三个连接:");for (int i = 0; i < 3; i++) {//2.驱动管理者处获取连接Connection connection = DriverManager.getConnection(url, user,password);//3.将连接放入到连接池中pool.add(connection);System.out.println(connection);}System.out.println("--------------------------------");} catch (Exception e) {throw new RuntimeException();}}//从连接池中获取连接,同时从连接池中移除当前获得的连接public static Connection getConnection(){//判断池中是否有连接,否则可能出现空指针if(pool.size()>0){Connection connection=pool.removeFirst();return connection;}else{//如果池子中没有,等待一下,再来try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return getConnection();}}/** * 释放连接--名称虽然叫closeResource,这只是从某一个使用当前连接的线程而言。 * 实际上是需要将连接归还到连接池中,也就是对连接池对象linkedlist对象的插入操作。 * @param connection * @param statement * @param resultSet */public static void closeResource(Connection connection,Statement statement,ResultSet resultSet){//注意做非空判断,要不可能出现空指针异常的try {//不要关闭连接,归还至数据库if(connection!=null)pool.add(connection);//打印一下吧System.out.println("归还"+connection);}finally{try {if(statement!=null)statement.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException();}finally{try {if(resultSet!=null)resultSet.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException();}}}}}


 

0 0
原创粉丝点击