当前位置: 代码迷 >> 综合 >> DBUtils
  详细解决方案

DBUtils

热度:46   发布时间:2024-01-24 10:16:30.0

 

DBUtils是一个第三方工具类

导包!导包!导包!

commons-dbutils-1.4.jar

里面有个核心类叫做!

QueryRunner。QueryRunner的构造参数是dataSource

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());//编写SQL语句String sql = "insert users (username,upassword) values (?,?)";//为占位符设置参数Object[] params = {"j","10"};try {int rows = qr.update(sql, params);if(rows>0) {System.out.println("添加成功");}else {System.out.println("添加失败");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}

 

概述:

DBUtils是数据库操作实用工具

封装了JDBC操作,简化操作

DBUtils三个核心功能介绍,

QueryRunner提供对SQL语句操作的API

ResultSetHandler接口,定义select操作后怎样封装结果集

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

QueryRunner核心类:

QueryRunner(DataSource ds)提供数据源(连接池),DBUtils底层自动维护连接Connection。

update(String sql,Object.....params)

query(String sql,ResultSetHandler<T>,Object...params)

查询

步骤一:创建QueryRunner核心类。参数是getSource

步骤二:写SQL语句。为了防止注入攻击,最好使用占位符来实现,占位符就是?

步骤三:实现占位符,用Object数组,Object[] users = {xxxxxxx};这样的形式

步骤四:使用qr.查询功能,将params作为参数.传进去

 

步骤五:接收.query的返回值是一个对象数组.如果不想查看是什么对象的话,完全可以,快捷键 Alt+Shift+L,然后左边就自己出来了

步骤六:遍历,这个没有难度,完全OK

try{QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());String sql = "select * from users where uid < ?";Object[] params = {5};//			List<User> rs = qr.query(sql, new BeanListHandler<User>(User.class));List<User> users = qr.query(sql, params, new BeanListHandler<User>(User.class));
//			List<User> users = qr.query(sql, params, new BeanListHandler<User>(User.class));for(User temp:users) {System.out.println(temp.toString());}}catch (SQLException e) {throw new RuntimeException(e);}

 

但是这里需要注意两个问题:

第一:配置文件的XML如果是c3p0那它的名字必须是,c3p0-config.xml,一个字也不能差,配置文件名必须完全和这个一致

第二:javaBean作为返回值队列返回,它的属性名字,必须所有的都和数据库的属性名完全相同,一字不差才可以。否则将会

JavaBean类

JavaBean就是一个类,在开发中常用封装数据。具有如下特性

需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。

提供私有字段:private 类型 字段名;

提供getter/setter方法:

提供无参构造

细心点会注意到,query的参数是一个BeanListHandler对象,参数还是User.class.这个我也不知道为什么,但是可以提供资料

说明

ArrayHandler

将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值

ArrayListHandler

将结果集中每一条记录封装到一个Object数组中,这些数组封装到list集合中

ScalarHandler

它是用于单数据。例如select count(*) from 表操作

MapHandler

将结果集第一行封装到Map集合中,Key 列名, Value 该列数据

MapListHandler

将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合

BeanHandler

将结果集中第一条记录封装到指定的javaBean中

BeanListHandler

将结果集中每一条记录封装到指定的javaBean中,将记录封装到list集合中

MapHandler

将结果集中第一条记录封装到了Map<String,Object>中,key就是字段名称,value就是字段值

MapListHandler

将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值

ColumnListHandler

将结果集中指定的字段值封装到一个list中

 

 

Column处理器

@Testpublic void testQueryAll1() {try {QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());String sql = "select * from users";List<Object> users = qr.query(sql, new ColumnListHandler("username"));for(Object temp:users) {System.out.println(temp);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

 

 

MapList

@Testpublic void testQueryMap() {QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());String sql = "select * from users";try {List<Map<String, Object>> list = qr.query(sql, new MapListHandler());for(Map<String,Object> map:list) {System.out.println(map);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

 

 

BeanList

@Testpublic void testQuery() {try{QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());String sql = "select * from users";List<User> rs = qr.query(sql, new BeanListHandler<User>(User.class));for(User temp:rs) {System.out.println(temp.toString());}}catch (SQLException e) {throw new RuntimeException(e);}}

 

 

new ScalarHandler()