Java DBUtils的使用

简介

DbUtil是apache旗下的一个JDBC封装的开源工具jar包,使用它调用数据库CRUD操作非常简便。

使用DBUtils的优点

  • 无资源泄漏 – DBUtils类确保不会发生资源泄漏。
  • 清理和清除代码 – DBUtils类提供干净清晰的代码来执行数据库操作,而无需编写任何清理或资源泄漏防护代码。
  • Bean映射 – DBUtils类支持从结果集中自动填充javabeans。

DBUtils的三个核心对象

QueryRunner

构造方法

  • QueryRunner qr = new QueryRunner();
    这个构造函数没有参数,可以用于需要手动控制事务,在使用该对象调用方法时(query,update,batch),需要传入Connection对象
  • QueryRunner qr = new QueryRunner(DataSource ds);
    这个构造函数可以传入一个数据源参数,它的事务是自动控制的(一个sql一个事务),在使用该对象调用方法时,不用再传入Connection对象。

成员方法

QueryRunner中提供对sql语句的操作,主要有三个方法:

  • query()用于执行查询操作(select)
  • update()用于执行更新操作(insert、update、delete)
  • batch()批处理

ResultSetHandler接口

定义了执行select操作后如何封装结果集

DBUtils类

是一个工具类,定义了关闭资源和事务处理的方法

DBUtils的使用

增删改

//dbutils 只是帮我们简化了CRUD 的代码, 但是连接的创建以及获取工作。 不在他的考虑范围
QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());

//增加
queryRunner.update("insert into account values (null , ? , ? )", "aa" ,1000);

//删除
queryRunner.update("delete from account where id = ?", 5);

//更新
queryRunner.update("update account set money = ? where id = ?", 10000000 , 6);

查询

方式1:直接new接口的匿名实现类

QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());


Account  account =  queryRunner.query("select * from account where id = ?", new ResultSetHandler<Account>(){

    @Override
    public Account handle(ResultSet rs) throws SQLException {
        Account account  =  new Account();
        while(rs.next()){
            String name = rs.getString("name");
            int money = rs.getInt("money");

            account.setName(name);
            account.setMoney(money);
        }
        return account;
    }

}, 6);

System.out.println(account.toString());

方式2:直接使用框架已经写好的实现类。

BeanHandler
查询到的单个数据封装成一个对象

QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
//查询单个对象
Account account = queryRunner.query("select * from account where id = ?", 
                                    new BeanHandler<Account>(Account.class), 8);

BeanListHandler
查询到的多个数据封装 成一个List<对象>

QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
List<Account> list = queryRunner.query("select * from account ",
                                       new BeanListHandler<Account>(Account.class));

ArrayHandler
把查询到的一条记录的每一个字段封装成一个数组

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
Object[] objects = qr.query("select * from user where username = ?", 
                            new ArrayHandler(),"xiaoming");

ArrayListHandler
查询到的一条记录的每一个字段封装成数组,把查询每条记录得到的数组封装成集合。

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
List<Object[]> list = qr.query("select * from user", new ArrayListHandler());

MapHandler
查询到的单条记录封装成一个map

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
Map<String, Object> map = qr.query("select * from user where id = ?", new MapHandler(),1);

MapListHandler

查询到的多条记录封装成一个集合,集合里面的元素是map。

ColumnListHandler
查询某一列的值封装成List。

QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
List<Object> list = qr.query("select * from user", new ColumnListHandler(2));//2,指sql语句中查询出来的列中的第二列

KeyedHandler
取多条记录,每一条记录封装到一个map中,再将这个map封装到另一个map中,key为指定的字段值。

ScalarHandler
取第一行第一列的数据

批处理

QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
Object[][] params = new Object[10][];
for (int i = 0; i < params.length; i++) {
    params[i] = new Object[] {"xiaoming","123456","xiaoming@163.com",new Date()};
}
queryRunner.batch("insert into user(username,password,email,birthday) values(?,?,?,?)",params );
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇