DataSource.java package org.local.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.LinkedList; /** * @function : * @author :jy * @company :万里网 * @date :2011-6-13 */ public class DataSource { private static String url = "jdbc:mysql://localhost:3306/jdbc"; private static String user = "root"; private static String password = ""; private static int initCount = 5;//初始化连接数 private static int maxCount = 10;//最大连接数 private static int currentCount = 5;//当前连接数 private static LinkedList<Connection> connectionsPoll = new LinkedList<Connection>(); public DataSource(){ try { for(int i=0; i<=initCount; i++){//初始化生成5个数据库连接 connectionsPoll.addLast(this.createConnection()); } } catch (SQLException e) { e.printStackTrace(); } } private Connection createConnection() throws SQLException{ return DriverManager.getConnection(url, user, password); } public void free(Connection conn){ connectionsPoll.addLast(conn);//将连接放回连接池 } public Connection getConnection() throws SQLException{ synchronized (connectionsPoll) {//多线程并发处理 if(connectionsPoll.size() > 0){ return connectionsPoll.removeFirst(); }else if(currentCount < maxCount){ //未超过最大连接数,则新建连接 Connection conn = createConnection(); connectionsPoll.add(conn); currentCount++; return conn; }else{ throw new SQLException("连接已经用完"); } } } } JdbcUtil.java package org.local.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public final class JdbcUtil { private static String url = "jdbc:mysql://localhost:3306/jdbc"; private static String user = "root"; private static String password = ""; private static DataSource datasource = null; private void JdbcUtil() { } static { try { Class.forName("com.mysql.jdbc.Driver"); datasource = new DataSource(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return datasource.getConnection(); } public static void free(Connection conn){ datasource.free(conn); } } Test.java package org.local.jdbc; import java.sql.Connection; import java.sql.SQLException; /** * @function : * @author :jy * @company :万里网 * @date :2011-6-13 */ public class Test { /** * @param args */ public static void main(String[] args) { try { for(int i=0; i<=10; i++){ Connection conn = JdbcUtil.getConnection(); System.out.println(conn); JdbcUtil.free(conn); } } catch (SQLException e) { e.printStackTrace(); } } }