数据库连接池原理(二)

来源:互联网 发布:java设计模式23种分类 编辑:程序博客网 时间:2024/06/05 16:55

模拟数据库连接池原理

一、写数据库的配置文件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 blocke.printStackTrace();}}if(statement != null){try {statement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.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);}}