一、关于DbUtils
commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,对传
统操作数据库的类进行二次封装,可以把结果集转化成List。
项目主页: http://commons.apache.org/dbutils/
文档地址: http://commons.apache.org/dbutils/examples.html
下载地址:http://commons.apache.org/downloads/download_dbutils.cgi
(1)org.apache.commons.dbutils
DbUtils : 提供如关闭连接、装载 JDBC 驱动程序等常规工作的工具类
QueryRunner : 该类简单化了 SQL 查询,它与 ResultSetHandler 组合在一起
使用可以完成大部分的数据库操作,能够大大减少编码量。
QueryLoader : 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。
(2)org.apache.commons.dbutils.handlers
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是
Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类
对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是
Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放
的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
(3)org.apache.commons.dbutils.wrappers
SqlNullCheckedResultSet :该类是用来对sql语句执行完成之后的的数值进行
null的替换。
StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()
二、例子
Java代码
1. public class TestDbUtils {
2.
3. /**
4. * BeanListHandler :将ResultSet中所有的数据转化成List,
List中存放的是类对象
5. */
6. public static void getBeanListData() {
7. Connection conn = getConnection();
8. QueryRunner qr = new QueryRunner();
9. try {
10. ResultSetHandler rsh = new BeanHandler
(TUser.class);
11. TUser usr = (TUser) qr.query(conn,"SELECT
id,username,gender FROM t_user WHERE id=10000",rsh);
12. System.out.println(StringUtils.center("findById",
50, '*'));
13. System.out.println("id=" + usr.getId() + " name=" +
usr.getUsername() + " gender=" + usr.getGender());
14.
15. List results = (List) qr.query(conn,"SELECT
id,username,gender FROM t_user",
16. new BeanListHandler(TUser.class));
17. System.out.println(StringUtils.center("findAll",
50, '*'));
18. for (int i = 0; i < results.size(); i++) {
19. TUser user = (TUser) results.get(i);
20. System.out.println("id=" + user.getId() + "
name=" + user.getUsername() + " gender=" + user.getGender());
21. }
22. } catch (SQLException e) {
23. e.printStackTrace();
24. } finally {
25. DbUtils.closeQuietly(conn);
26. }
27. }
28.
29. /**
30. * MapListHandler :将ResultSet中所有的数据存成List。List中
存放的是Map
31. */
32. public static void getMapListData() {
33. Connection conn = getConnection();
34. QueryRunner qr = new QueryRunner();
35. try {
36. List results = (List) qr.query(conn,"SELECT
id,username,gender FROM t_user",
37. new MapListHandler());
38. for (int i = 0; i < results.size(); i++) {
39. Map map = (Map) results.get(i);
40. System.out.println("id=" + map.get("id") + "
name=" + map.get("username") + " gender=" + map.get("gender"));
41. }
42. } catch (SQLException e) {
43. e.printStackTrace();
44. } finally {
45. DbUtils.closeQuietly(conn);
46. }
47. }
48.
49. /**
50. *新增和更新例子
51. */
52. public static void insertAndUpdateData(){
53. Connection conn = getConnection();
54. QueryRunner qr = new QueryRunner();
55. try{
56. //创建一个数组来存要insert的数据
57. Object[] insertParams = {"John Doe",
"000000","男"};
58. int inserts = qr.update(conn, "INSERT INTO t_user
(username,password,gender) VALUES (?,?,?)",
59. insertParams );
60. System.out.println("inserted " + inserts + "
data");
61.
62. Object[] updateParams = {"111111", "John Doe"};
63. int updates = qr.update(conn, "UPDATE t_user SET
password=? WHERE username=?",
64. updateParams );
65. System.out.println("updated "+ updates + " data");
66. }catch (SQLException e) {
67. e.printStackTrace();
68. } finally {
69. DbUtils.closeQuietly(conn);
70. }
71. }
72.
73. /**
74. * Unlike some other classes in DbUtils, this class
(SqlNullCheckedResultSet) is NOT thread-safe.
75. */
76. public static void findUseSqlNullCheckedResultSet(){
77. Connection conn = getConnection();
78. try{
79. Statement stmt = conn.createStatement();
80. ResultSet rs = stmt.executeQuery("SELECT id,
username, gender FROM t_user");
81. SqlNullCheckedResultSet wrapper = new
SqlNullCheckedResultSet(rs);
82. wrapper.setNullString("N/A"); // Set null string
83. rs = ProxyFactory.instance().createResultSet
(wrapper);
84.
85. while(rs.next()){
86. System.out.println("id="+rs.getInt("id") + "
username=" + rs.getString("username")
87. + " gender="+rs.getString("gender"));
88. }
89.
90. rs.close();
91. }catch(Exception e){
92. e.printStackTrace();
93. }finally{
94. DbUtils.closeQuietly(conn);
95. }
96. }
97.
98. /****数据库连接*** */
99. public static Connection getConnection() {
100. Connection conn = null;
101. String driver = "com.mysql.jdbc.Driver";
102. String url = "jdbc:mysql://127.0.0.1/springapp?
useUnicode=true&characterEncoding=gb2312";
103.
104. DbUtils.loadDriver(driver);
105.
106. try {
107. conn = DriverManager.getConnection(url, "root",
"root");
108. } catch (SQLException ex) {
109. ex.printStackTrace();
110. }
111. return conn;
112. }
113.
114. }