Apache金沙官网线上—DBUtils

如果你发现这七个执行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。

  • ArrayHandler:把结果集中的第一行数据转成对象数组。
  • ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  • ColumnListHandler:将结果集中某一列的数据存放到List中。
  • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

标明出处:https://blog.csdn.net/samjustin1/article/details/52220423

QueryRunner类
该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
QueryRunner类提供了两个构造方法:
默认的构造方法
需要一个 javax.sql.DataSource 来作参数的构造方法。
QueryRunner类的主要方法

2.实例化 QueryRunner,得到实例化对象qRunner。
3. qRunner.update()方法,执行增改删的sql命令,
    qRunner.query()方法,得到结果集。

ResultSetHandler接口
该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。

 1  import java.sql.Connection;  
 2 import java.sql.SQLException;  
 3 import java.util.List;  
 4 import org.apache.commons.dbutils.DbUtils;  
 5 import org.apache.commons.dbutils.QueryRunner;  
 6 import org.apache.commons.dbutils.handlers.BeanListHandler;  
 7 import Beans.UserBean;  
 8   
 9 public class main {  
10   
11     public static void main(String[] args) throws SQLException {  
12         insert_test();  
13         del_test();  
14     }  
15       
16     static void insert_test() throws SQLException{  
17         Connection conn = ConnectDb.Connect();  
18           
19         //创建SQL执行工具   
20         QueryRunner qRunner = new QueryRunner();   
21           
22         //执行SQL插入   
23         int n = qRunner.update(conn, "insert into user(name,age) values('xxx',22)");   
24         System.out.println("成功插入" + n + "条数据!");   
25           
26         //关闭数据库连接   
27         DbUtils.closeQuietly(conn);       
28     }   
29       
30     static void select_test() throws SQLException{  
31         Connection conn = ConnectDb.Connect();  
32           
33         //创建SQL执行工具   
34         QueryRunner qRunner = new QueryRunner();   
35           
36         @SuppressWarnings("unchecked")  
37         List<UserBean> list = (List<UserBean>) qRunner.query(conn, "select id,name,age from user", new BeanListHandler(UserBean.class));   
38         //输出查询结果   
39         for (UserBean user : list) {   
40                 System.out.println(user.getAge());   
41         }   
42           
43         //关闭数据库连接   
44         DbUtils.closeQuietly(conn);   
45     }   
46   
47     static void update_test() throws SQLException{  
48         Connection conn = ConnectDb.Connect();  
49           
50         //创建SQL执行工具   
51         QueryRunner qRunner = new QueryRunner();   
52         //执行SQL插入   
53         int n = qRunner.update(conn, "update user set name = 'xxx',age=28");   
54         System.out.println("成功更新" + n + "条数据!");   
55           
56         //关闭数据库连接   
57         DbUtils.closeQuietly(conn);   
58     }   
59       
60     static void del_test() throws SQLException{  
61         Connection conn = ConnectDb.Connect();  
62           
63         //创建SQL执行工具   
64         QueryRunner qRunner = new QueryRunner();   
65         //执行SQL插入   
66         int n = qRunner.update(conn, "DELETE from user WHERE name='xxx';");   
67         System.out.println("删除成功" + n + "条数据!");   
68           
69         //关闭数据库连接   
70         DbUtils.closeQuietly(conn);   
71     }   
72 } 

DbUtils类
DbUtils :提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:

(二)使用DBUtils

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
API介绍:
org.apache.commons.dbutils.QueryRunner
org.apache.commons.dbutils.ResultSetHandler
工具类
org.apache.commons.dbutils.DbUtils

一、先熟悉DBUtils的API:

  • public static void close(…) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。
  • public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。
  • public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
  • public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。

1、包org.apache.commons.dbutils   

  • public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
  • public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
  • public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。
  • public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
  • public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。

2、数据库表

ResultSetHandler 接口的实现类

1、连接类ConnectDb:import java.sql.DriverManager;

接口摘要
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包装类。

2、ResultSetHandler
这一接口执行处理一个jaca.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。
这一组件提供了ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, MapHandler, MapListHandler, and ScalarHandler等执行程序。

DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,
如果不是的话,它们就关闭连接、声明和结果集(ResultSet)。
CloseQuietly:
CloseQuietly这一方法不仅能在连接、声明或者结果集(ResultSet)为NULL情况下避免关闭,
还能隐藏一些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。
在重载CloseQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),
这是因为在大多数情况下,连接、声明和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。
使用这一方法,你最后的块就可以只需要调用这一方法即可。
CommitAndCloseQuietly(Connection conn):
这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关闭时发生的一些SQL异常。
LoadDriver(String driveClassName):这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE。
使用这种方法,你不需要去捕捉这个异常ClassNotFoundException。使用loadDrive方法,编码就变得更容易理解,
你也就得到了一个很好的Boolean返回值,这个返回值会告诉你驱动类是不是已经加载成功了。

其实只是使用的话,只看两个类(DbUtils 和QueryRunner)和一个接口(ResultSethandler)就可以了。

1.加载JDBC驱动程序类,并用DriverManager来得到一个数据库连接conn。

本文由金沙官网线上发布于数据库,转载请注明出处:Apache金沙官网线上—DBUtils

您可能还会对下面的文章感兴趣: