Apache ---- DBUilts框架源码
一 简介
Commons-dbutils是Apache组织提供了一个开源jdbc工具类库,它是读jsbc’的简单封装,学习成本极低,并且使用dbutils能极大的简化jdbc编码的工作量同时也不会影响程序的性能
API的介绍
Org.apache.connons.dbutils.QueryRunneer ---相当于DBManager
Org.apache.connons.dbutils.ResultSetHandler
工具类:
Org.apache.connons.dbutils.DbUtils
二 类和接口的介绍
1.DbUtils类的介绍
(1)dbUtils提供了如关闭连接,装在jdbc驱动程序等常规工作的工具类,里面的方法都是静态的。
(2)public static void close(…) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果 不是的话,它们就关闭Connection、Statement和ResultSet。
(3)public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。
(4)public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
(5)public static boolean loadDriver(java.lang.
String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。
2.QueryRunner类 --- 核心类
(1)该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
(2)QueryRunner类提供了两个构造方法:
• 默认的构造方法
• 需要一个 javax.sql.DataSource 来作参数的构造方法。
3.ResultSetHandler接口
(1)该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
(2)ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。
4.ResultSetHandler 接口的实现类
(1)ArrayHandler:把结果集中的第一行数据转成对象数组。
(2)ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
(3)BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
(4)BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
三 实例应用
1.创建
public class UserDaoImpl {
// 插入操作
public void insert() {
// 得到数据库连接池对象
QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource());
String sql = "insert into users(name,password) values('liop','8988')";
try {
runner.update(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 删除操作
public void delete() {
QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource());
String sql = "delete from users where id=1";
try {
runner.update(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 更新操作
public void update() {
QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource());
String sql = "update users set name='老王',password=222 where id=3";
try {
runner.update(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 通过Id查询操作
public void findById() {
QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource());
String sql = "select * from users where id=3";
BeanHandler rsh = new BeanHandler(User.class);
try {
User user = runner.query(sql, rsh);
System.out.println(user.toString());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 查询所有
public void findAll() {
QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource());
String sql = "select * from users";
BeanListHandler rsh = new BeanListHandler(User.class);
try {
List<User> entities = runner.query(sql, rsh);
System.out.println(entities.size());
for (User entity : entities) {
System.out.println(entity.toString());
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 批处理
public void bath() {
QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource());
String sql = "insert into users(name,password) values(?,?)";
Object[][] params = { { "老李", "111" }, { "qqq", "222" },
{ "www", "333" }, { "eee", "444" } };
try {
runner.batch(sql, params);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// ArrayHandler的使用
public void testArrayHandler() {
QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource());
String sql = "select * from users where id=5";
ArrayHandler rsh = new ArrayHandler();
try {
Object[] array = runner.query(sql, rsh);
System.out.println(Arrays.asList(array));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// ArrayListHandler的使用
public void testArrayListHandler() {
QueryRunner runner = new QueryRunner(DBManager_c3p0.getDataSource());
String sql = "select * from users";
ArrayListHandler rsh = new ArrayListHandler();
try {
List<Object[]> array = runner.query(sql, rsh);
for (int i = 1; i < array.size(); i++) {
System.out.println(Arrays.asList(array.get(i)));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2.测试
public static void main(String[] args) {
new UserDaoImpl().insert();
new UserDaoImpl().delete();
new UserDaoImpl().update();
new UserDaoImpl().findById();
new UserDaoImpl().findAll();
// 批处理
new UserDaoImpl().bath();
// 数组使用
new UserDaoImpl().testArrayHandler();
//数组
//new UserDaoImpl().testArrayListHandler();
}