创建一个自己的数据库连接池类(为JDBC工具类服务:创建Connection,关闭Connection):
package com.mengya.JDBCUtil;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.Properties;
public class DataSource {
private InputStream instream;
private Properties pro;
private static int initCount = 5;// 初始连接数
private static int maxCount = 10;// 数据库最大连接数
private static int currentConnt = 0;// 当前数据库的连接数
LinkedList<Connection> connectionPool = new LinkedList<Connection>();// 数据库连接池
// 同包才能方问该类
DataSource() {
instream = this.getClass().getResourceAsStream("/system.properties");
pro = new Properties();
try {
pro.load(instream);
try {
Class.forName(pro.getProperty("driver"));
for(int i=1;i<=initCount;i++){
this.connectionPool.addLast(this.CreateConnection());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("加载数据库驱动时出错!");
}
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("加载配置文件出错!");
}
}
// 释放数据库的连接
public void freeConnection(Connection conn) {
this.connectionPool.addLast(conn); //仍然放到数据库连接池中去了,也没有关掉,这样就可以重复使用
}
// 创建数据库的连接
private Connection CreateConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(pro.getProperty("url"), pro
.getProperty("username"), pro.getProperty("password"));
currentConnt++;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("创建数据库连接失败!");
}
return conn;
}
// 得到数据库的连接
public Connection getConnection() {
synchronized (connectionPool) {
if (connectionPool.size() > 0) {
return connectionPool.removeFirst();
}
if (currentConnt < maxCount) {
return this.CreateConnection();
}
throw new RuntimeException("数据库已达到最大的连接数!");
}
}
}
再创建一个JDBC工具类,在DAO中就调用该工具类中的方法
package com.mengya.JDBCUtil;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public final class SQLConnectionUitl {
private static SQLConnectionUitl sqlconn;
private DataSource myDataSource;
// 私有构造方法
private SQLConnectionUitl() {
myDataSource = new DataSource();
}
// 单例模式,让SQLConnectionUitl只实例化一次,这样数据库驱动也只加载一次.
public static SQLConnectionUitl getSQLConnectionUitl() {
if (sqlconn == null) {
synchronized (SQLConnectionUitl.class) {
if (sqlconn == null) {
sqlconn = new SQLConnectionUitl();
}
}
}
return sqlconn;
}
// 得到数据库的连接
package com.mengya.JDBCUtil;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class SQLConnectionUitl {
private static SQLConnectionUitl sqlconn;
private DataSource myDataSource;
// 私有构造方法
private SQLConnectionUitl() {
myDataSource = new DataSource();
}
// 单例模式,让SQLConnectionUitl只实例化一次,这样数据库驱动也只加载一次.
public static SQLConnectionUitl getSQLConnectionUitl() {
if (sqlconn == null) {
synchronized (SQLConnectionUitl.class) {
if (sqlconn == null) {
sqlconn = new SQLConnectionUitl();
}
}
}
return sqlconn;
}
// 得到数据库的连接
public Connection getSQLConnection() {
Connection conn = null