连接案例:
首先:我们使用的是mysql数据库,所以要有一个mysql和java的JDBCjar包;
然后是DBCP中的两个jar包,DBCP使用的话,需要两个包:
dbcp.jar和pool.jar。
普通连接:
package dbcp; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; /** * dbcp的使用有两个包: * dbcp核心包 和 pool包 * @author mzy * */ public class Demo01 { private static String url="jdbc:mysql://localhost:3306/test"; private static String user="root"; private static String password="123456"; private static String driverClass="com.mysql.jdbc.Driver"; public static void main(String[] args) { // 1) 创建dbcp连接池对象 BasicDataSource bds = new BasicDataSource(); // 2) 设置连接参数 bds.setUrl(url); bds.setUsername(user); bds.setPassword(password); bds.setDriverClassName(driverClass); // 3) 设置连接池参数 bds.setInitialSize(5); // 初始化连接 bds.setMaxActive(10); // 最大连接数 // 如果不调整的话,会一直等待 bds.setMaxWait(3000); // 当超过最大连接时,最大等待时间为3秒 try { // 从连接池中获取连接 for(int i=0; i<11; i++) { Connection conn = bds.getConnection(); System.out.println(conn); // 这里得到的Connection是一个代理对象 if(i==3) { conn.close(); // 这些close其实是把连接放回连接池中 // 注意之前我们讲的代理模式:动态代理 } } } catch (SQLException e) { e.printStackTrace(); } } }
通过jdbc.properties中的配置文件进行连接(并设定初始化参数,注意和上面作对比):
jdbc.properties
url=jdbc:mysql://localhost:3306/test username=root password=123456 driverClassName=com.mysql.jdbc.Driver initialSize=5 maxActive=12 maxWait=5000
package dbcp; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; /** * 通过读properties配置文件进行读写 * * 读取jdbc.properties文件内容 * dbcp可以自动识别每个配置信息,但是约定前提: * 配置文件文件的key名称和设置方法的名称保持一致!!!(反射) * 即javaBean约束: * 例如setAge --> age 等等 */ public class Demo02 { public static void main(String[] args) { try { // 获取连接 Properties prop = new Properties(); // 使用类路径读取配置文件 InputStream in = Demo02.class.getResourceAsStream("/jdbc.properties"); // 加载配置文件 prop.load(in); // 1) 使用工厂类来创建dbcp连接池对象(读取配置文件方式) BasicDataSource bds = (BasicDataSource)BasicDataSourceFactory.createDataSource(prop); //从连接池中获取连接 for(int i=1;i<=13;i++){ Connection conn = bds.getConnection(); //注意: 这里返回的Connection对象,不是原来的Connection,而是代理后的Connection对象 System.out.println(conn); //注意: 使用连接池,记住释放连接 /* if(i==3){ conn.close();// 把连接对象放回连接池中的。连接池中最大能够保存最大连接数的连接对象 }*/ } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }