码迷,mamicode.com
首页 > 数据库 > 详细

JDBC(连接池) -- 02(I)

时间:2017-10-07 23:31:01      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:new   pwd   final   静态代码块   .exe   back   one   upd   else   

自定义连接池一:
    1.sun提供了一个连接池接口 javax.sql.DataSource。
    2.定义连接池MyDataSource实现接口DataSource。
    3.使用集合LinkedList<Connection> pool存放多个连接对象。LinkedList移除添加操作效率高。连接对象还是和以前一样调用工具类JDBCUtils里的getConnection。(第一篇JDBC的有介绍)
    4.书写获取连接的方法getConnection(),获取连接改为从池子中拿对象。
    5.书写归还连的方法backConnection()。把从池子pool中获取的对象归还。

    我们需要三个类:
  1.JDBCUtils(第一篇JDBC的随笔有介绍如何书写)
  2.MyDataSource
  3.TestMyDataSource

注:测试用的Junit。
一、书写MyDataSource方法,此处不实现接口DataSource
package com.it.JDBC;

import java.sql.Connection;
import java.util.LinkedList;

/**
 * @author Payphone
 * @time 2017-10-07 自定义连接池,未增强close方法
 * */
public class MyDataSource {

    private static Connection conn;
    private static LinkedList<Connection> pool = new LinkedList<Connection>();

    /**
     * 构造方法初始化连接池个数,也可用静态代码块初始化。
     * */
    public MyDataSource() {
        for (int i = 0; i < 5; i++) {
            conn = JDBCUtils.getConnection();
            pool.add(conn);
        }
        System.out.println("---------分割线---------");
    }

    /**
     * 获取连接
     * */
    public Connection getConnection() {
        System.out.println("连接前的个数:" + pool.size());
        conn = pool.remove(0);
        System.out.println("连接后的个数:" + pool.size());
        return conn;
    }

    /**
     * 归还连接
     * */
    public void backConnection() {
        System.out.println("释放连接前的个数:" + pool.size());
        pool.add(conn);
        System.out.println("释放连接后的个数:" + pool.size());
    }
}

二、书写测试方法TestMyDataSource

package com.it.TestJDBC;

import java.sql.Connection;
import java.sql.PreparedStatement;
import org.junit.Test;

import com.it.JDBC.JDBCUtils;
import com.it.JDBC.MyDataSource;

public class TestMyDataSource {

    @Test
    public void testAddUser() {
        Connection conn = null;
        MyDataSource md = new MyDataSource();
        PreparedStatement psmt = null;
        try {
            conn = md.getConnection();
            String sql = "insert into t_user(id,pwd) values(?,?)";
            psmt = conn.prepareStatement(sql);
            psmt.setInt(1, 2015005);
            psmt.setString(2, "2015005");
            int rows = psmt.executeUpdate();
            if (rows > 0) {
                System.out.println("插入数据成功!");
            } else {
                System.out.println("插入数据失败!");
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            JDBCUtils.Release(null, psmt, null);
            md.backConnection();
        }
    }
}

自定义连接池一代码并不完善,我们调用了工具类JDBCUtils.Release方法释放了除conn外的对象。又调用了md.backConnection方法归还conn。

在自定义连接池二的代码中我们将增强close方法。调用工具类JDBCUtils.Release方法归还连接。

 

 

JDBC(连接池) -- 02(I)

标签:new   pwd   final   静态代码块   .exe   back   one   upd   else   

原文地址:http://www.cnblogs.com/ljwdemo/p/7636102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!