微信登录

JDBC - dbutils工具包

引入

处理返回结果 handlers

handlers 解释
ArrayHandler 将结果集中的第一条记录封装到一个0bject[]数组中,数组中的每一个元素就是 这条记录中的每一个字段的值
ArraylistHandler 将结果集中的每一条记录都封装到一个 object]数组中,将这些数组在封装到 List集合中。
BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
BeanistHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean 在封装到List 集合中
columnlistHandl er 将结果集中指定的列的字段值,封装到一个List集合中
KeyedHandler 将结果集中每一条记录封装到Map<string,object>,在将这个map集合做为另一 个Map的value,另一个Map集合的key是指定的字段的值。
MapHandler 将结果集中第一条记录封装到了Map<string,object>集合中,key就是字段名称, value就是字段值
MapListHandler 将结果集中每一条记录封装到了Map<string,object>集合中,key就是字段名称, value就是字段值,在将这些Map封装到List集合中。
ScalarHandler 它是用于单个数据。例如select count()fom表操作

测试

  1. package com.atguigu5.dbutils;
  2. import java.sql.Connection;
  3. import java.sql.Date;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.List;
  7. import java.util.Map;
  8. import org.apache.commons.dbutils.QueryRunner;
  9. import org.apache.commons.dbutils.ResultSetHandler;
  10. import org.apache.commons.dbutils.handlers.BeanHandler;
  11. import org.apache.commons.dbutils.handlers.BeanListHandler;
  12. import org.apache.commons.dbutils.handlers.MapHandler;
  13. import org.apache.commons.dbutils.handlers.MapListHandler;
  14. import org.apache.commons.dbutils.handlers.ScalarHandler;
  15. import org.junit.Test;
  16. import com.atguigu2.bean.Customer;
  17. import com.atguigu4.util.JDBCUtils;
  18. /*
  19. * commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,封装了针对于数据库的增删改查操作
  20. *
  21. */
  22. public class QueryRunnerTest {
  23. //测试插入
  24. @Test
  25. public void testInsert() {
  26. Connection conn = null;
  27. try {
  28. QueryRunner runner = new QueryRunner();
  29. conn = JDBCUtils.getConnection3();
  30. String sql = "insert into customers(name,email,birth)values(?,?,?)";
  31. int insertCount = runner.update(conn, sql, "蔡徐坤","caixukun@126.com","1997-09-08");
  32. System.out.println("添加了" + insertCount + "条记录");
  33. } catch (SQLException e) {
  34. e.printStackTrace();
  35. }finally{
  36. JDBCUtils.closeResource(conn, null);
  37. }
  38. }
  39. //测试查询
  40. /*
  41. * BeanHander:是ResultSetHandler接口的实现类,用于封装表中的一条记录。
  42. */
  43. @Test
  44. public void testQuery1(){
  45. Connection conn = null;
  46. try {
  47. QueryRunner runner = new QueryRunner();
  48. conn = JDBCUtils.getConnection3();
  49. String sql = "select id,name,email,birth from customers where id = ?";
  50. BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
  51. Customer customer = runner.query(conn, sql, handler, 23);
  52. System.out.println(customer);
  53. } catch (SQLException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. }finally{
  57. JDBCUtils.closeResource(conn, null);
  58. }
  59. }
  60. /*
  61. * BeanListHandler:是ResultSetHandler接口的实现类,用于封装表中的多条记录构成的集合。
  62. */
  63. @Test
  64. public void testQuery2() {
  65. Connection conn = null;
  66. try {
  67. QueryRunner runner = new QueryRunner();
  68. conn = JDBCUtils.getConnection3();
  69. String sql = "select id,name,email,birth from customers where id < ?";
  70. BeanListHandler<Customer> handler = new BeanListHandler<>(Customer.class);
  71. List<Customer> list = runner.query(conn, sql, handler, 23);
  72. list.forEach(System.out::println);
  73. } catch (SQLException e) {
  74. e.printStackTrace();
  75. }finally{
  76. JDBCUtils.closeResource(conn, null);
  77. }
  78. }
  79. /*
  80. * MapHander:是ResultSetHandler接口的实现类,对应表中的一条记录。
  81. * 将字段及相应字段的值作为map中的key和value
  82. */
  83. @Test
  84. public void testQuery3(){
  85. Connection conn = null;
  86. try {
  87. QueryRunner runner = new QueryRunner();
  88. conn = JDBCUtils.getConnection3();
  89. String sql = "select id,name,email,birth from customers where id = ?";
  90. MapHandler handler = new MapHandler();
  91. Map<String, Object> map = runner.query(conn, sql, handler, 23);
  92. System.out.println(map);
  93. } catch (SQLException e) {
  94. e.printStackTrace();
  95. }finally{
  96. JDBCUtils.closeResource(conn, null);
  97. }
  98. }
  99. /*
  100. * MapListHander:是ResultSetHandler接口的实现类,对应表中的多条记录。
  101. * 将字段及相应字段的值作为map中的key和value。将这些map添加到List中
  102. */
  103. @Test
  104. public void testQuery4(){
  105. Connection conn = null;
  106. try {
  107. QueryRunner runner = new QueryRunner();
  108. conn = JDBCUtils.getConnection3();
  109. String sql = "select id,name,email,birth from customers where id < ?";
  110. MapListHandler handler = new MapListHandler();
  111. List<Map<String, Object>> list = runner.query(conn, sql, handler, 23);
  112. list.forEach(System.out::println);
  113. } catch (SQLException e) {
  114. e.printStackTrace();
  115. }finally{
  116. JDBCUtils.closeResource(conn, null);
  117. }
  118. }
  119. /*
  120. * ScalarHandler:用于查询特殊值
  121. */
  122. @Test
  123. public void testQuery5(){
  124. Connection conn = null;
  125. try {
  126. QueryRunner runner = new QueryRunner();
  127. conn = JDBCUtils.getConnection3();
  128. String sql = "select count(*) from customers";
  129. ScalarHandler handler = new ScalarHandler();
  130. Long count = (Long) runner.query(conn, sql, handler);
  131. System.out.println(count);
  132. } catch (SQLException e) {
  133. e.printStackTrace();
  134. }finally{
  135. JDBCUtils.closeResource(conn, null);
  136. }
  137. }
  138. @Test
  139. public void testQuery6(){
  140. Connection conn = null;
  141. try {
  142. QueryRunner runner = new QueryRunner();
  143. conn = JDBCUtils.getConnection3();
  144. String sql = "select max(birth) from customers";
  145. ScalarHandler handler = new ScalarHandler();
  146. Date maxBirth = (Date) runner.query(conn, sql, handler);
  147. System.out.println(maxBirth);
  148. } catch (SQLException e) {
  149. e.printStackTrace();
  150. }finally{
  151. JDBCUtils.closeResource(conn, null);
  152. }
  153. }
  154. /*
  155. * 自定义ResultSetHandler的实现类
  156. */
  157. @Test
  158. public void testQuery7(){
  159. Connection conn = null;
  160. try {
  161. QueryRunner runner = new QueryRunner();
  162. conn = JDBCUtils.getConnection3();
  163. String sql = "select id,name,email,birth from customers where id = ?";
  164. ResultSetHandler<Customer> handler = new ResultSetHandler<Customer>(){
  165. @Override
  166. public Customer handle(ResultSet rs) throws SQLException {
  167. // System.out.println("handle");
  168. // return null;
  169. // return new Customer(12, "成龙", "Jacky@126.com", new Date(234324234324L));
  170. if(rs.next()){
  171. int id = rs.getInt("id");
  172. String name = rs.getString("name");
  173. String email = rs.getString("email");
  174. Date birth = rs.getDate("birth");
  175. Customer customer = new Customer(id, name, email, birth);
  176. return customer;
  177. }
  178. return null;
  179. }
  180. };
  181. Customer customer = runner.query(conn, sql, handler,23);
  182. System.out.println(customer);
  183. } catch (SQLException e) {
  184. e.printStackTrace();
  185. }finally{
  186. JDBCUtils.closeResource(conn, null);
  187. }
  188. }
  189. }

关闭

  1. public static void closeResource1(Connection conn,Statement ps,ResultSet rs){
  2. DbUtils.closeQuietly(conn);
  3. DbUtils.closeQuietly(ps);
  4. DbUtils.closeQuietly(rs);
  5. }
JDBC - dbutils工具包