您的位置:首页 > 运维架构 > Apache

Apache DBUtils入门(一)

2012-12-02 16:00 323 查看
一、概述
 
DbUtils小巧的Java数据库操作工具,它在JDBC的基础上做了科学的封装,旨在简化JDBC代码混乱与重复。
 
对于JDBC代码,存在很多问题,算是对Java的批判:
1、操作过程复杂,代码操作一个模式,大量的重复。
2、结果集难以处理,拿到一个ResultSet干屁啊,一个一个度,转称JavaBean,后来形成List,太麻烦了。
3、到处都强制检查SQLException,烦不烦啊,影响代码的美观和可读性。
 
当然,以上的批判不是说JDBC设计不合理,二是缺乏更高层操作API的支持。因此才产生了众多的开源数据库操作的框架和工具包。
 
二、熟悉DBUtils的API
 
针对DBUitlsAPI的包,做个简单的翻译,以便迅速掌握API的使用。

1、------------------------------------

包org.apache.commons.dbutils

        DbUtils是一个为简化JDBC操作的小类库。
接口摘要

ResultSetHandler 将ResultSet转换为别的对象的工具。

RowProcessor 将ResultSet行转换为别的对象的工具。 
类摘要

BasicRowProcessor RowProcessor接口的基本实现类。

BeanProcessor BeanProcessor匹配列明到Bean属性名,并转换结果集列到Bean对象的属性中。

DbUtils 一个JDBC辅助工具集合。

ProxyFactory 产生JDBC接口的代理实现。

QueryLoader 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。

QueryRunner 使用可插拔的策略执行SQL查询并处理结果集。

ResultSetIterator 包装结果集为一个迭代器。

 

2、------------------------------------

包org.apache.commons.dbutils.handlers

        ResultSetHandler接口的实现类
类摘要

AbstractListHandler 将ResultSet转为List的抽象类

ArrayHandler 将ResultSet转为一个Object[]的ResultSetHandler实现类

ArrayListHandler 将ResultSet转换为List<Object[]>的ResultSetHandler实现类

BeanHandler 将ResultSet行转换为一个JavaBean的ResultSetHandler实现类

BeanListHandler 将ResultSet转换为List<JavaBean>的ResultSetHandler实现类

ColumnListHandler 将ResultSet的一个列转换为List<Object>的ResultSetHandler实现类

KeyedHandler 将ResultSet转换为Map<Map>的ResultSetHandler实现类

MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类

MapListHandler 将ResultSet转换为List<Map>的ResultSetHandler实现类

ScalarHandler 将ResultSet的一个列到一个对象。
 
3、------------------------------------

包org.apache.commons.dbutils.wrappers

        添加java.sql类中功能包装类。
类摘要

SqlNullCheckedResultSet 在每个getXXX方法上检查SQL NULL值的ResultSet包装类。

StringTrimmedResultSet 取出结果集中字符串左右空格的ResultSet包装类。

 
三、环境
 
Java5
commons-dbutils-1.2-bin.zip
mysql-noinstall-5.1.40-win32.zip
mysql-connector-java-5.1.10.zip
 
下载地址:
http://apache.freelamp.com/commons/dbutils/binaries/commons-dbutils-1.2-bin.zip
http://gd.tuwien.ac.at/db/mysql/Downloads/MySQL-5.1/mysql-noinstall-5.1.40-win32.zip
http://gd.tuwien.ac.at/db/mysql/Downloads/Connector-J/mysql-connector-java-5.1.10.zip
 
四、实例
 
1、sql脚本

create tableuser (                                                                        

                    id int(11)
not null auto_increment,                                    

                    name
varchar(50) character set latin1
not null,            

                    pswd varchar(50) characterset latin1
defaultnull,    

                    primary
key (id)                                                                            

                ) engine=MYISAM auto_increment=1 default charset=gbk

 
2、简单的数据库连接工具

package stu.lavasoft.dbutils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**

* 随便写个数据库连接获取工具,凑合着把例子跑起来

*

* @author leizhimin 2009-11-6 14:48:22

*/
public class ConnTools {

        private static String dirverClassName ="com.mysql.jdbc.Driver";

        private static String url ="jdbc:mysql://192.168.104.101:3306/testdb?useUnicode=true&characterEncoding=utf8";

        private static String user ="root";

        private static String password ="leizhimin";

        public static Connection makeConnection() {

                Connection conn = null;

                try {

                        Class.forName(dirverClassName);

                } catch (ClassNotFoundException e) {

                        e.printStackTrace();

                }

                try {

                        conn = DriverManager.getConnection(url, user, password);

                } catch (SQLException e) {

                        e.printStackTrace();

                }

                return conn;

        }

}

 
3、实体Bean

package stu.lavasoft.dbutils;

/**

* 实体Bean

*

* @author leizhimin 2009-11-6 16:05:41

*/
public class User {

        private int id;

        private String name;

        private String pswd;

        public int getId() {

                return id;

        }

        public void setId(int id) {

                this.id = id;

        }

        public String getName() {

                return name;

        }

        public void setName(String name) {

                this.name = name;

        }

        public String getPswd() {

                return pswd;

        }

        public void setPswd(String pswd) {

                this.pswd = pswd;

        }

        @Override

        public String toString() {

                return
"User{" +

                                "id=" + id +

                                ", name='" + name + '\'' +

                                ", pswd='" + pswd + '\'' +

                                '}';

        }

}

 
4、测试类

package stu.lavasoft.dbutils;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**

* DbUtils入门

*

* @author leizhimin 2009-11-6 14:47:26

*/
public class Test1 {

        public staticvoid main(String[] args)
throws SQLException {

                test_insert();

                test_find();

        }

        public staticvoid test_insert()
throws SQLException {

                System.out.println("-------------test_insert()-------------");

                //创建连接

                Connection conn = ConnTools.makeConnection();

                //创建SQL执行工具

                QueryRunner qRunner = new QueryRunner();

                //执行SQL插入

                int n = qRunner.update(conn,
"insert into user(name,pswd) values('iii','iii')");

                System.out.println("成功插入" + n +"条数据!");

                //关闭数据库连接

                DbUtils.closeQuietly(conn);

        }

        public staticvoid test_find()
throws SQLException {

                System.out.println("-------------test_find()-------------");

                //创建连接

                Connection conn = ConnTools.makeConnection();

                //创建SQL执行工具

                QueryRunner qRunner = new QueryRunner();

                //执行SQL查询,并获取结果

                List<User> list = (List<User>) qRunner.query(conn,
"select id,name,pswd from user", new BeanListHandler(User.class));

                //输出查询结果

                for (User user : list) {

                        System.out.println(user);

                }

                //关闭数据库连接

                DbUtils.closeQuietly(conn);

        }

}

 
执行结果:

-------------test_insert()-------------

成功插入1条数据!

-------------test_find()-------------

User{id=4, name='bbb', pswd='bbb'}

User{id=3, name='aaa', pswd='bbb'}

User{id=5, name='iii', pswd='iii'}

User{id=6, name='iii', pswd='iii'}

Process finished with exit code 0

 
呵呵。相比JDBC,的确方便多了。

转自:http://lavasoft.blog.51cto.com/62575/222771
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: