java dbutils_Java学习之DBUtils

DBUtils:只是帮我们简化了CRUD 的代码。数据库连接的创建以及获取工作,不在其工作范围

一、DBUtils应用

①、DBUtils的jar文件的下载

②、Sql Server 、C3P0、DBUtils环境搭建(导入相应jar文件)

Sql Server :sqljdbc42.jar(JDBC驱动)

C3P0:c3p0-0.9.5.5.jar,mchange-commons-java-0.2.19.jar,c3p0-config.xml文件

DBUtilts:commons-dbutils-1.7.jar

37c6718b549e499b9830f794566ad5cb.png

③、增删改

QueryRunner queryRunner = new QueryRunner(newComboPooledDataSource());//增加

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 ResultSetHandler接口的匿名实现类

public voidtestMain() {

ComboPooledDataSource dataSource= newComboPooledDataSource();

QueryRunner runner= newQueryRunner(dataSource);try{

Account result= runner.query("Select * from account where id =?", new ResultSetHandler() {

@Overridepublic Account handle(ResultSet rs) throwsSQLException {

Account account= newAccount();while(rs.next()) {

account.setId(rs.getInt("Id"));

account.setName(rs.getString("Name"));

account.setMoney(rs.getBigDecimal("Money"));

}returnaccount;

}

},1);

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

}catch(SQLException e) {

e.printStackTrace();

}

}

2、使用框架实现ResultSetHandler 接口的类

2.1、实现ResultSetHandler接口的类有:

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

BeanListHandler, 查询到的多个数据封装 成一个List

这两个使用频率最高

ArrayHandler,  查询到的单个数据封装成一个数组

ArrayListHandler,  查询到的多个数据封装成一个集合 ,集合里面的元素是数组

MapHandler,  查询到的单个数据封装成一个map

MapListHandler,查询到的多个数据封装成一个集合 ,集合里面的元素是map

ColumnListHandler

KeyedHandler

ScalarHandler(一个单元格--Select Count(1) from T_Name)

2.2、代码实现

2.2.1、查询单个对象

1 QueryRunner queryRunner = new QueryRunner(newComboPooledDataSource());2 //查询单个对象

3 Account account = queryRunner.query("select * from account where id = ?",4 new BeanHandler(Account.class), 8);

2.2.2、查询多个对象

1 QueryRunner queryRunner = new QueryRunner(newComboPooledDataSource());2 List list = queryRunner.query("select * from account ",3 new BeanListHandler(Account.class));

二、自定义DBUtils

Ⅰ、update方法

1 public intupdate(String sql, Object... args) {2 Connection connection = null;3 PreparedStatement ps = null;4 int result = 0;5 try{6 connection =JDBCUtil.getConnection();7 ps =connection.prepareStatement(sql);8

9 ParameterMetaData metaData =ps.getParameterMetaData();10 //根据参数个数,循环给参数赋值

11 for (int i = 0; i < metaData.getParameterCount(); i++) {12 ps.setObject(i + 1, args[i]);13 }14

15 result =ps.executeUpdate();16 } catch(SQLException e) {17

18 e.printStackTrace();19 } finally{20

21 }22 returnresult;23 }

Ⅱ、查询(query)

1、查询结果操作接口

1 //用于查询结果集,封装到指定类型对象中,并返回对象实例

2 public interface ResultSetHandler{3 T handle(ResultSet resultSet);4 }

2、通用查询

1 public T query(String sql,ResultSetHandlerhandler, Object... args) {2 Connection connection = null;3 PreparedStatement ps = null;4 ResultSet resultSet=null;5 try{6 connection =JDBCUtil.getConnection();7 ps =connection.prepareStatement(sql);8

9 ParameterMetaData metaData =ps.getParameterMetaData();10 //根据参数个数,循环给参数赋值

11 for (int i = 0; i < metaData.getParameterCount(); i++) {12 ps.setObject(i + 1, args[i]);13 }14 //查询结果集

15 resultSet =ps.executeQuery();16 //调用实现ResultSetHandler接口的类中handle方法

17 returnhandler.handle(resultSet);18 } catch(SQLException e) {19

20 e.printStackTrace();21 } finally{22

23 }24 return null;25 }

3、调用自定义通用查询

1 public voidtestMain() {2 Account account=CommonCRUDUtils.query("select * from account where id=?",new

3 ResultSetHandler() {4

5 @Override6 publicAccount handle(ResultSet resultSet) {7 Account account = newAccount();8 try{9 if(resultSet.next()) {10 account.setId(resultSet.getInt("Id"));11 account.setName(resultSet.getString("Name"));12 account.setMoney(resultSet.getBigDecimal("Money"));13 returnaccount;14 }15 } catch(SQLException e) {16

17 e.printStackTrace();18 }19 return null;20 }21

22 },3);23

24 System.out.println(account.toString());25 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值