连接池技术(30)
1、共享连接 Connection。以优化性能。对于多并发的时候呢,优势更为明显,好比线程池技术。
2、常见连接池:DBCP (apache) , C3P0。 javax.sql.datasource。
3、dbcp和pool的jar包实现高效的连接池。
4、编写工具类
// BasicDataSource类 是 DataSource接口的实现类
// DataSource接口,它是java与每种数据库连接池 连接的规范标准
public class JDBCUtils { public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306/daydb"; public static final String USERNAME = "root"; public static final String PASSWORD = "root"; /* * 创建连接池BasicDataSource */ public static BasicDataSource dataSource = new BasicDataSource(); //静态代码块 static { //对连接池对象 进行基本的配置 dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动 dataSource.setUrl(URL); //指定要连接的数据库地址 dataSource.setUsername(USERNAME); //指定要连接数据的用户名 dataSource.setPassword(PASSWORD); //指定要连接数据的密码 } /* * 返回连接池对象 */ public static DataSource getDataSource(){ return dataSource; } }
5、 工具类的使用
建立数据库连接的代码中,要用try...catch来抛运行时期异常,连接时期有异常时候那么接下来的操作都跑不了,所以没必要用throws SQLException
public class Demo { // 插入功能 @Test public void insert(){ try { //获取一个用来执行SQL语句的对象 QueryRunner QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)"; Object[] params = {"股票收入", 5500, "收入"}; int line = qr.update(sql,params); //结果集处理 System.out.println("line = " + line); } catch (SQLException e) { throw new RuntimeException(e); } } //删除功能 @Test public void delete(){ try { //创建一个QueryRunner对象,用来完成SQL语句的执行 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); //执行SQL语句 String sql = "DELETE FROM zhangwu WHERE name = ?"; Object[] params = {"股票收入"}; int line = qr.update(sql, params); //结果集的处理 System.out.println("line="+line); } catch (SQLException e) { throw new RuntimeException(e); } } //更新功能 @Test public void update(){ try { //创建一个QueryRunner对象,用来完成SQL语句的执行 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); //执行SQL语句 String sql = "UPDATE zhangwu SET money = money+1000 WHERE name=?"; Object[] params = {"股票收入"}; int line = qr.update(sql, params); //结果集的处理 System.out.println("line="+line); } catch (SQLException e) { throw new RuntimeException(e); } } //查询功能,将结果集中第一条记录封装到一个指定的javaBean中。 @Test public void search(){ try{ //获取QueryRunner QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); //执行SQL语句 String sql = "SELECT * FROM zhangwu"; Object[] params = {}; Product p = qr.query(sql, new BeanHandler<Product>(Product.class), params); //结果集处理 System.out.println(p); } catch(SQLException e){ throw new RuntimeException(e); } } }