Java实战之04JavaWeb-06DBUtils

Posted 铭昊Coder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实战之04JavaWeb-06DBUtils相关的知识,希望对你有一定的参考价值。

一、DBUtils

1.DBUtils的简介

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

2.DBUtils中的API的概要介绍

QueryRunner类:sql操作的核心类 这个对象内部封装着操作数据的方法

ResultSetHandler接口:代表结果集到实体的映射封装的功能

为什么是接口:具体封装的规则不知道 要根据实体业务进行自行操作

DButils类:主要是关于数据库的关闭 事务的提交相关的方法

3.QueryRunner的API详解

注意:在使用DBUtils之前 导入的jar包

1)数据库驱动

2)连接池的jar

3)DBUtils的jar

(1)怎样创建QueryRunner

有两种方式可以创建QueryRunner

第一种无参:new QueryRunner();

一般情况下 结合事务操作一起使用

第二种有参:new QueryRunner(DataSource);

一般情况下 不需要事务控制的时候使用

注意:程序中操作sql时 必须得有Connection对象,有数据源参数的构造方法会自动从数据源中获得一个Connection对象操作数据库。无参的构造方法在创建QueryRunner时没有提供Connection的对象信息,在指定操作sql的方法时也得传入Connection。

QueryRunner中的方法

batch

update

query

(2)更新数据的操作(单条sql执行)

update操作:

update方法有三个参数 是通过这三个参数的组合 形成多个方法

Connection:数据库的连接对象 与无参的new QueryRunner()一起使用

sql:要执行sql语句  是必须有的

params:代笔占位符的实际的参数

通过上述参数可以组成哪些方法

update(Connection,sql,params);

update(Connection,sql);

update(sql,params);

update(sql);

 1     @Test
 2     public void test1() throws SQLException{
 3         //需求:修改products表中的id=100的商品的category为 生活
 4         //1、创建QueryRunner
 5         QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
 6         //2、执行sql
 7         String sql = "update products set category=? where id=?";
 8         int update = runner.update(sql, "生活","100");
 9         System.out.println(update);
10     }

(3)更新数据的操(批量sql执行)

batch操作---同时执行sql结构相同的多条语句

参数:

Connection:数据库的连接对象 与无参的new QueryRunner()一起使用

sql:要执行sql语句  是必须有的

params:二维数组

一维代表是指定的sql

二维代表sql中的占位符的实际参数

例如:

sql:insert into products values(?,?,?);

param:

{

  {500,ios入门,15},

  {600,C#入门,28},

  {700,ruby入门,45},

  {800,hadoop入门,99}

}

insert语句执行几次:4次  每一次执行3个参数

需求:向products表中批量插入2条数据

 1 //1、创建QueryRunner对象
 2         QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
 3         //2、执行sql
 4         String sql = "insert into products values(?,?,?,?,?,?,?)";
 5         //Object[][] params = new Object[2][7];
 6         //params[0][0]="500";
 7         Object[][] params = {
 8                 {"500","ruby入门",89,"感性",800,"bookcover/105.jpg","好书啊好书"},
 9                 {"600","hadoop入门",89,"感性",800,"bookcover/106.jpg","好书啊好书"}
10         };
11         int[] batch = runner.batch(sql, params);
12         //{1,1}
13         for(int i:batch){
14             System.out.println(i);
15         }

(4)查询的操作query

query方法执行select语句

参数:

Connection:数据库的连接对象 与无参的new QueryRunner()一起使用

sql:要执行sql语句  是必须有的

params:代笔占位符的实际的参数

ResultSetHandelr:结果集封装的功

 1     @Test
 2     public void test1() throws SQLException{
 3         //1、创建QueryRunner
 4         QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
 5         //2、执行sql语句
 6         String sql = "select * from products";
 7         List<Product> query = runner.query(sql, new ResultSetHandler<List<Product>>() {
 8             @Override
 9             public List<Product> handle(ResultSet rs) throws SQLException {
10                 //写自己的封装的逻辑
11                 List<Product> list = new ArrayList<Product>();
12                 while(rs.next()){
13                     Product pro = new Product();
14                     pro.setId(rs.getString("id"));
15                     pro.setName(rs.getString("name"));
16                     pro.setCategory(rs.getString("category"));
17                     pro.setDescription(rs.getString("description"));
18                     pro.setImgurl(rs.getString("imgurl"));
19                     pro.setPnum(rs.getInt("pnum"));
20                     pro.setPrice(rs.getDouble("price"));
21                     list.add(pro);
22                 }
23                 return list;
24             }
25 
26         });
27 
28         System.out.println(query);
29     }

二、ResultSetHandler接口的实现类

BeanListHandler:返回是List<T>

BeanHandler:返回的是T

MapListHandler:返回是List<Map<String,Object>>

MapHandler:返回是Map<String,Object>

ScalarHandler:返回的是一个object获得的是一个值 是查出的虚拟表的左上角的 值,常用在聚合函数查询中

---------------------------------------------------------------

ArrayListHandler:List<Object[]>

ArrayHandler:Object[]

ColumnListHandler:List<Object> 查询的是结构的某一列的数据集合

KeyedHandler:返回值Map<Object,Map<String,Object>>

{

  200={id=200, category=生活, price=78.0, pnum=120, description=好书一本, name=android入门经典, imgurl=bookcover/102.jpg},

  100={id=100, category=生活, price=88.0, pnum=100, description=好书一本, name=java入门经典, imgurl=bookcover/101.jpg}

}

DbUtils工具类:工具类,包括事务的提交,回滚和资源的关闭的工具方法,使用不多

以上是关于Java实战之04JavaWeb-06DBUtils的主要内容,如果未能解决你的问题,请参考以下文章

Java实战之04JavaWeb-02Request和Response

Java实战之04JavaWeb-03会话技术

Java实战之04JavaWeb-07Listener和Filter

Java实战之02Hibernate-04多表映射

Java实战之04JavaWeb-05事务和连接池

如何从 h2 数据库中获取字符串(Java、DBUtil)