赞
踩
目的:解决建立数据库连接耗费资源和时间很多的问题,提高性能
第一种 DBCP
① 需要添加jar包:
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
② 添加属性资源文件
dbcpconfig.properties
③ 编写数据源工具类
package com.qianfeng.DBCP;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; /* * 1.导入三方架包 * 2.编写配置文件:配置文件的类型必须是properties,名字随意,位置随意 * 3.创建DBCPUtil工具类 */ public class DBCPUtil { //1.创建数据源 private static DataSource dataSource; //2.连接配置文件 static{ Properties properties = new Properties(); try { //获取配置信息,将内容保存到properties对象里面 properties.load(DBCPUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //得到连接池对象,将配置信息指定给连接池对象 try { dataSource = BasicDataSourceFactory.createDataSource(properties); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //3.获取连接 public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } //4.释放连接 public static void release(Connection conn,PreparedStatement statement,ResultSet set) { if (conn != null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (set != null) { try { set.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
第二种 C3P0
① 需要添加jar包:
c3p0-0.9.1.2.jar
commons-dbutils-1.4.jar
② 添加属性资源文件
c3p0-config.xml
③ 编写数据源工具类
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; /* * 注意事项: * 1.系统会自动读取c3p0-config.xml文件:a.文件的名字要固定- c3p0-config.xml b.文件的位置也是固定的--src下面 * 2.一般会自己创建xml配置文件,按照要求创建即可. * 3.优势:又有不需要自己关联配置文件,所以使用更方便 */ public class C3P0Util { //1.创建池子(数据源)---创建了数据源之后,系统会自动添加连接 private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); //向池子中添加连接---系统会自动读取c3p0-config.xml文件:a.文件的名字要固定-c3p0-config.xml b.文件的位置也是固定的--src下面 //2.获取连接 public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } //3.释放连接 public static void release(Connection conn,PreparedStatement statement,ResultSet set) { if (conn != null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (set != null) { try { set.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
DBUtils
什么是dbutils,它的作用
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。
1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象
Dbutils三个核心对象
一: QueryRunner类
QueryRunner中提供对sql语句操作的API.
它主要有三个方法
query() 用于执行select
update() 用于执行insert update delete,create
batch() 批处理
二: ResultSetHandler接口
用于定义select操作后,怎样封装结果集.
三: DBUtils类
它就是一个工具类,定义了关闭资源与事务处理的方法
① 导入jar包
commons-dbutils-1.4.jar与c3p0 和 mysql驱动jar
② 创建QueryRunner对象
③ 使用query或者update方法执行sql语句
③ 使用ResultSetHander封装结果集
通常通过实现ResultSetHander接口来实现
常用的接口的实现类
BeanHander //用模型封装,接收返回一个模型对象
BeanListHander //用模型封装,用list封装模型,返回一个模型类的list集合
具体实现:
import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import Utils.C3P0Util; import bean.DeptBean; public class TestQueryRunner { public static void main(String[] args) throws SQLException { //insert(); //delete(); //addAll(); //selectAll(); select1(); } public static void insert() throws SQLException { QueryRunner qr=new QueryRunner(C3P0Util.getDataSource()); int num=qr.update("insert into dept values (?,?,?)",50,"xiaoming","american"); if(num>0) { System.out.println("插入成功"); }else { System.out.println("插入失败"); } } public static void delete() throws SQLException{ QueryRunner qRunner=new QueryRunner(C3P0Util.getDataSource()); int num=qRunner.update("delete from dept where deptno=?",50); if(num>0) { System.out.println("删除成功"); }else { System.out.println("删除失败"); } } //批量添加 public static void addAll() throws SQLException{ QueryRunner queryRunner=new QueryRunner(C3P0Util.getDataSource()); //创建一个二维数组组装数据 Object [][] params=new Object[3][]; for(int i=0;i<params.length;i++) { params[i]=new Object[] {i+8,"bingbing"+i,"beijing"+i}; } //写sql语句 String sql="insert into dept values(?,?,?)"; @SuppressWarnings("unused") int[] nums=queryRunner.batch(sql, params); } //查询所有数据并将结果集封装到集合中 public static void selectAll() throws SQLException{ QueryRunner queryRunner=new QueryRunner(C3P0Util.getDataSource()); List<DeptBean> list=queryRunner.query("select * from dept", new BeanListHandler<>(DeptBean.class)); //DeptBean是一个模型类 System.out.println(list); } //查询一条数据返回模型 public static void select1() throws SQLException{ QueryRunner queryRunner=new QueryRunner(C3P0Util.getDataSource()); DeptBean deptBean=queryRunner.query("select * from dept where deptno=?", new BeanHandler<>(DeptBean.class),9) System.out.println(deptBean); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。