通过连接池方式,用户无需获取数据库Connction连接实例,即可操作数据库,效率提高
DBCPUtils连接池工具类
package com.java.week08; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; /* * 获取数据库连接,返回一个DataSource实例对象 */ public class DBCPUtils { //静态成员变量 private static BasicDataSource dataSource = new BasicDataSource(); /* * 配置文件中的数据库信息 */ private static String driver = null; private static String url = null; private static String username = null; private static String password = null; //公有方法,返回一个DataSource实例对象 public static DataSource getDataSource(){ return dataSource; } //静态方法,连接数据库 static{ readContext(); /* * 必须设置参数 * 通过dataSource设置连接数据库信息 */ dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); /* * 可选设置参数 * 通过dataSource设置连接池信息 */ dataSource.setInitialSize(1);//初始化连接数 dataSource.setMaxActive(1); //最大连接数量 dataSource.setMaxIdle(1); //最大空闲数 dataSource.setMinIdle(1); //最小空闲数 } //读取配置文件中的数据库信息 private static void readContext(){ InputStream in = DBCPUtils.class.getClassLoader().getResourceAsStream("db.properties");//获取配置文件流 Properties pros = new Properties();//持久化类 try { pros.load(in); driver = pros.getProperty("driver"); url = pros.getProperty("url"); username = pros.getProperty("username"); password = pros.getProperty("password"); } catch (IOException e) { throw new RuntimeException(e + "配置文件读取失败!"); } } }
测试类
package com.java.week08; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayListHandler; /* * 无需创建连接,即可完成对数据库的操作 * 采用连接池,效率很高 */ public class DBCPTest { public static void main(String[] args) { insert(); select(); } private static QueryRunner qr = new QueryRunner(DBCPUtils.getDataSource()); /* * 定义两个方法,一个插入,一个查询 */ //数据表插入 public static void insert(){ String sql = "INSERT INTO student(sname,sage,sscore,sclassroom,sex) VALUES(?,?,?,?,?)"; Object[] param = {"mk",24,67,"1703","男"}; try { int update = qr.update(sql, param); System.out.println(update); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("数据插入失败!"); } } //数据表查询 public static void select(){ String sql = "SELECT * FROM student"; try { List<Object[]> query = qr.query(sql, new ArrayListHandler()); for (Object[] objects : query) { for (Object object : objects) { System.out.print(object + " "); } System.out.println(); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("数据查询失败!"); } } }
测试结果