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()