1. 程式人生 > >JDBC(連接池) -- 02(I)

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

cep 介紹 val 代碼 connect pack -- -1 i++

自定義連接池一:
    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)