模拟数据库连接池原理
一、写数据库的配置文件jdbcConfig.properties
二、编写公共类
public class JDBCPoolUtil {
private static String driveClass;
private static String url;
private static String user;
private static String password;
static{
try {
ClassLoader classLoader = JDBCPoolUtil.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("jdbcconfig.properties");
Properties properties = new Properties();
properties.load(inputStream);
driveClass = properties.getProperty("driverClassName");
url = properties.getProperty("url");
user = properties.getProperty("username");
password = properties.getProperty("password");
Class.forName(driveClass);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {
Connection connection = DriverManager.getConnection(url, user, password);
return connection;
}
public static void release(ResultSet resultSet,Statement statement,Connection connection){
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(statement != null)
{
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
三、编写连接池demo
//模拟数据库连接池原理
public class ConnectionPoolDemo {
private static List<Connection> pool = new ArrayList<Connection>();
static {
try {
InputStream inputStream = JDBCPoolUtil.class.getClassLoader().getResourceAsStream("jdbcconfig.properties");
Properties properties = new Properties();
properties.load(inputStream);
String initialSize = properties.getProperty("initialSize");
for(int i = 0; i < Integer.parseInt(initialSize); i++){
Connection connection = JDBCPoolUtil.getConnection();
pool.add(connection);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//从池中取出一个链接
public synchronized static Connection getConnection() {
if(pool.size()>0) {
Connection connection = pool.remove(0);
return connection;
} else {
throw new RuntimeException("服务器忙");
}
}
//把链接放回池中
public static void release(Connection connection) {
pool.add(connection);
}
}