JDBC连接池简单写法

原理:

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

步骤:

1. 在class构造器一次性创建10个连接,将连接保存LinkedList中

2. 实现getConnection 从 LinkedList中返回一个连接

3. 提供将连接放回连接池中方法

1、连接池代码

public class JDBCTest {

    // 链表 --- 实现栈结构
    private LinkedList<Connection> dataSources = new LinkedList<Connection>();
    // 初始化连接数量
    public JDBCTest() {
        // 一次性创建10个连接
        for (int i = 0; i < 10; i++) {
            try {
                // 1、装载sqlserver驱动对象
                DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                // 2、通过JDBC建立数据库连接
                Connection con = DriverManager.getConnection("jdbc:sqlserver://192.168.2.6:1433;DatabaseName=customer", "sa", "123");
                // 3、将连接加入连接池中
                dataSources.add(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public Connection getConnection() throws SQLException {
        // 取出连接池中一个连接
        Connection conn = dataSources.removeFirst();
        // 删除第一个连接返回
        return conn;
    }

    // 将连接放回连接池
    public void releaseConnection(Connection conn) {
        dataSources.add(conn);
    }
}

2、使用连接池重构我们的用户查询函数

  public static void main(String[] args) {
        // 1、使用连接池建立数据库连接
        JDBCTest dataSource = new JDBCTest();
        Connection conn;
        try {
            conn = dataSource.getConnection();
            // 2、创建状态
            Statement state = conn.createStatement();
            // 3、查询数据库并返回结果
            ResultSet result = state.executeQuery("select * from users");
            // 4、输出查询结果
            while (result.next()) {
                System.out.println(result.getString("email"));
            }

            // 5、断开数据库连接
            result.close();
            state.close();
            // 6、归还数据库连接给连接池
            dataSource.releaseConnection(conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

为了考虑并发的问题:我们可以使用synchronized关键字。

public synchronized connection getconnection()

posted @ 2020-02-28 16:44  享受饥饿  阅读(253)  评论(0)    收藏  举报