0316 DBUtils
DBUtils封装了JDBC中的应用
三个核心功能
(1)QueryRunner提供了对sql语句操作的API
(2)ResultSetHandler接口提供了用于select查询后的结果集的处理
(3)DBUtils类就是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner核心类
常用方法
update(Connection conn, String sql, Object... params) 用于完成表的增删改
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)用于完成数据表的查询
例:新增,在这里还需要结束JDBCUtils获取conn对象
//新增分类 public void add() throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //创建queryrunner对象 QueryRunner qr=new QueryRunner(); String sql="insert into sort(sname,sdesc) values(?,?)"; //执行 int row=qr.update(conn,sql,"插排","插电的"); System.out.println(row); }
同样删除和修改跟上述代码差不多,只不过sql语句不一样
查询ResultSetHandler结果集处理类
(1)ArrayHandler类 将查询到的数据的第一条数据存到Object数组中,数组中的每一个元素都是每一个字段的值(不常用)
例:借助JDBCUtils获取conn对象
//查询ArrayHandler public void get1() throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //创建queryrunner对象 QueryRunner qr=new QueryRunner(); String sql="select * from sort"; Object[] obj=qr.query(conn,sql, new ArrayHandler()); for(Object o:obj){ System.out.print(o); } System.out.println(); }
(2)ArrayListHandler 将查询到的每一条数据存储到object数组中,再将这些object数组存到list集合中
例:借助JDBCUtils获取conn对象
//ArrayListHandler public void get2() throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //创建queryrunner对象 QueryRunner qr=new QueryRunner(); String sql="select * from sort"; List<Object[]> list=qr.query(conn,sql, new ArrayListHandler()); for(Object[] objs:list){ for(Object o:objs){ System.out.print(o+" "); } System.out.println(); } }
(3)BeanHeader 将查询到的数据的第一条数据封装到javaBean中
例:借助JDBCUtils获取conn对象
//BeanHandler public void get3() throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //创建queryrunner对象 QueryRunner qr=new QueryRunner(); String sql="select * from sort"; Sort sort=qr.query(conn,sql, new BeanHandler<Sort>(Sort.class)); System.out.println(sort); }
(4)BeanListHeader 将查询到的每一条数据封装到javaBean中 再将javaBean存到list集合中
例:借助JDBCUtils获取conn对象
//BeanListHandler public void get4() throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //创建queryrunner对象 QueryRunner qr=new QueryRunner(); String sql="select * from sort"; List<Sort> list=qr.query(conn,sql, new BeanListHandler<Sort>(Sort.class)); System.out.println(list); }
(5)ColumnListHeader 将查询到的指定字段名的结果存到list集合中
例:借助JDBCUtils获取conn对象
//ColumnListHandler public void get5() throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //创建queryrunner对象 QueryRunner qr=new QueryRunner(); String sql="select sname from sort"; List<String> list=qr.query(conn,sql, new ColumnListHandler<String>()); System.out.println(list); }
//ColumnListHandler public void get6() throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //创建queryrunner对象 QueryRunner qr=new QueryRunner(); String sql="select * from sort"; List<String> list=qr.query(conn,sql, new ColumnListHandler<String>("sname")); System.out.println(list); }
(6)ScalarHandler 用于单数据查询,类似select count(*)
例:借助JDBCUtils获取conn对象
//ScalarHandler public void get7() throws SQLException{ //获取链接对象 Connection conn=JDBCUtils.getConn(); //创建queryrunner对象 QueryRunner qr=new QueryRunner(); String sql="select count(*) from sort"; Long count=qr.query(conn,sql, new ScalarHandler<Long>()); System.out.println(count); }
连接池
链接用来管理connection,所以我们就不用频繁的创建链接对象了,而是通过从池中获取connection对象 用完了然后再还给链接池
常见的连接池DBCP.C3P0
我们学习DBCP
需要导入两个jar包
编写工具类
MYDBUtils
package com.oracle.tools; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; public class MYDBUtils { public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306/java1127?characterEncoding=utf-8"; public static final String USERNAME = "root"; public static final String PASSWORD = "123456"; /* * 创建连接池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; } }
那我们的之前写过的代码就可以改成
package com.oracle.dao; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ColumnListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import com.oracle.daomain.Sort; import com.oracle.tools.MYDBUtils; public class SortDao { //新增分类 public void add() throws SQLException{ //创建queryrunner对象 QueryRunner qr=new QueryRunner(MYDBUtils.getDataSource()); String sql="insert into sort(sname,sdesc) values(?,?)"; //执行 int row=qr.update(sql,"插排","插电的"); System.out.println(row); } //查询ArrayHandler public void get1() throws SQLException{ //创建queryrunner对象 QueryRunner qr=new QueryRunner(MYDBUtils.getDataSource()); String sql="select * from sort"; Object[] obj=qr.query(sql, new ArrayHandler()); for(Object o:obj){ System.out.print(o); } System.out.println(); } //ArrayListHandler public void get2() throws SQLException{ //创建queryrunner对象 QueryRunner qr=new QueryRunner(MYDBUtils.getDataSource()); String sql="select * from sort"; List<Object[]> list=qr.query(sql, new ArrayListHandler()); for(Object[] objs:list){ for(Object o:objs){ System.out.print(o+" "); } System.out.println(); } } //BeanHandler public void get3() throws SQLException{ //创建queryrunner对象 QueryRunner qr=new QueryRunner(MYDBUtils.getDataSource()); String sql="select * from sort"; Sort sort=qr.query(sql, new BeanHandler<Sort>(Sort.class)); System.out.println(sort); } //BeanListHandler public void get4() throws SQLException{ //创建queryrunner对象 QueryRunner qr=new QueryRunner(MYDBUtils.getDataSource()); String sql="select * from sort"; List<Sort> list=qr.query(sql, new BeanListHandler<Sort>(Sort.class)); System.out.println(list); } //ColumnListHandler public void get5() throws SQLException{ //创建queryrunner对象 QueryRunner qr=new QueryRunner(MYDBUtils.getDataSource()); String sql="select sname from sort"; List<String> list=qr.query(sql, new ColumnListHandler<String>()); System.out.println(list); } //ColumnListHandler public void get6() throws SQLException{ //创建queryrunner对象 QueryRunner qr=new QueryRunner(MYDBUtils.getDataSource()); String sql="select * from sort"; List<String> list=qr.query(sql, new ColumnListHandler<String>("sname")); System.out.println(list); } //ScalarHandler public void get7() throws SQLException{ //创建queryrunner对象 QueryRunner qr=new QueryRunner(MYDBUtils.getDataSource()); String sql="select count(*) from sort"; Long count=qr.query(sql, new ScalarHandler<Long>()); System.out.println(count); } }