本文共 2336 字,大约阅读时间需要 7 分钟。
【JDBC】day03_数据库连接池
1).properties配置文件
//java.util.Properties用来读取配置文件 Properties prop = new Properties(); //通过文件流读取并解析配置文件内容 prop.load(new FileInputStream("config.properties")); /* * String getProperty(String key) * 根据配置文件中每一项的key("="左边的内容) * 获取对应的值("="右边的内容) */ String driverName = prop.getProperty("driverName");
2)//DBCP 连接池
//org.apache.commons.dbcp.BasicDataSource;
private static BasicDataSource ds;
数据库连接池用的jar包:
3)Connection getConnection()
连接池提供了一个方法:Connection getConnection() * 该方法会将当前连接池中的一个空闲连接返回,由于连接池在创建时可以设置超时时间,该时间的作用就在这里体现,当连接池中没有空闲连接时,该方法会进入阻塞状态,等待空线程,若设置的超时时间经过后,连接池依然没有空闲连接可用时,该方法会抛超时异常.
代码示例:
package day02;import java.io.FileInputStream;import java.sql.Connection;import java.sql.DriverManager;import java.util.Properties;import org.apache.commons.dbcp.BasicDataSource;/** * 该类负责管理数据库的连接 * 当业务逻辑需要使用数据库连接时,只需要通过当前类的 * 静态方法获取连接即可. * 这样的好处在于,连接数据的工作由当前类维护,那么将来 * 数据库连接发生改变时,只有这一个类改变就可以了. * */public class DBUtil { //DBCP 连接池 private static BasicDataSource ds; static{ try{ //读取配置文件 //java.util.Properties用来读取配置文件 Properties prop = new Properties(); //通过文件流读取并解析配置文件内容 prop.load(new FileInputStream("config.properties")); /* * String getProperty(String key) * 根据配置文件中每一项的key("="左边的内容) * 获取对应的值("="右边的内容) */ String driverName = prop.getProperty("driverName"); String url=prop.getProperty("url"); String username=prop.getProperty("username"); String password=prop.getProperty("password"); //最大连接数 int maxActive=Integer.parseInt(prop.getProperty("maxActive")); //最大等待时间(ms) int maxWait=Integer.parseInt(prop.getProperty("maxWait")); //初始化连接池 ds = new BasicDataSource(); ds.setDriverClassName(driverName); ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); //连接池中的最大连接数 ds.setMaxActive(maxActive); //最大等待时间 getConnection时有效 ds.setMaxWait(maxWait); }catch(Exception e){ e.printStackTrace(); } } /** * 获取一个数据库连接 * @return * @throws Exception */ public static Connection getConnection()throws Exception{ try{ /* * 连接池提供了一个方法: * Connection getConnection() * 该方法会将当前连接池中的一个空闲连接返回 * 由于连接池在创建时可以设置超时时间,该时间的作用 * 就在这里体现,当连接池中没有空闲连接时,该方法会进入 * 阻塞状态,等待空线程,若设置的超时时间经过后,连接池 * 依然没有空闲连接可用时,该方法会抛超时异常. */ return ds.getConnection(); }catch(Exception e){ System.out.println("数据库连接异常!"); throw e; } }}