• JAVA【Apache-DBUtils实现CRUD】


    目录

    一、测试插入

    二、测试查询 

    查询单条记录

    查询多条记录

    查询单条记录并且封装为键值

     查询多条记录并且封装为键值

    特殊查询:查询表中记录个数 

    特殊查询:查询最大日期 

     三、自定义resultsethandler的实现类

    四、关闭连接 


     

    commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,封装了针对于数据库的增删改查操作

    首先导入我们所需要的Dbutils的jar包  

     

    一、测试插入

    1. //测试插入
    2. @Test
    3. public void testInsert() {
    4. Connection conn = null;
    5. try {
    6. QueryRunner runner = new QueryRunner();
    7. conn = JDBCUtils.getConnection3();
    8. String sql = "insert into customers(name,email,birth)values(?,?,?)";
    9. //返回值是添加了几条记录
    10. int insertCount = runner.update(conn, sql, "薛总司令","siling@126.com","1997-09-08");
    11. System.out.println("添加了" + insertCount + "条记录");
    12. } catch (SQLException e) {
    13. e.printStackTrace();
    14. }finally{
    15. JDBCUtils.closeResource(conn, null);
    16. }
    17. }

     

    二、测试查询 

    查询单条记录

    1. //测试查询
    2. /*
    3. * BeanHander:是ResultSetHandler接口的实现类,用于封装表中的一条记录。
    4. */
    5. @Test
    6. public void testQuery1(){
    7. Connection conn = null;
    8. try {
    9. QueryRunner runner = new QueryRunner();
    10. conn = JDBCUtils.getConnection3();
    11. String sql = "select id,name,email,birth from customers where id = ?";
    12. BeanHandler handler = new BeanHandler<>(Customer.class);
    13. Customer customer = runner.query(conn, sql, handler, 23);
    14. System.out.println(customer);
    15. } catch (SQLException e) {
    16. // TODO Auto-generated catch block
    17. e.printStackTrace();
    18. }finally{
    19. JDBCUtils.closeResource(conn, null);
    20. }
    21. }

    查询多条记录

    1. /*
    2. * BeanListHandler:是ResultSetHandler接口的实现类,用于封装表中的多条记录构成的集合。
    3. */
    4. @Test
    5. public void testQuery2() {
    6. Connection conn = null;
    7. try {
    8. QueryRunner runner = new QueryRunner();
    9. conn = JDBCUtils.getConnection3();
    10. String sql = "select id,name,email,birth from customers where id < ?";
    11. BeanListHandler handler = new BeanListHandler<>(Customer.class);
    12. List list = runner.query(conn, sql, handler, 23);
    13. list.forEach(System.out::println);
    14. } catch (SQLException e) {
    15. e.printStackTrace();
    16. }finally{
    17. JDBCUtils.closeResource(conn, null);
    18. }
    19. }

     

    查询单条记录并且封装为键值

    1. /*
    2. * MapHander:是ResultSetHandler接口的实现类,对应表中的一条记录。
    3. * 将字段及相应字段的值作为map中的key和value
    4. */
    5. @Test
    6. public void testQuery3(){
    7. Connection conn = null;
    8. try {
    9. QueryRunner runner = new QueryRunner();
    10. conn = JDBCUtils.getConnection3();
    11. String sql = "select id,name,email,birth from customers where id = ?";
    12. MapHandler handler = new MapHandler();
    13. Map map = runner.query(conn, sql, handler, 23);
    14. System.out.println(map);
    15. } catch (SQLException e) {
    16. e.printStackTrace();
    17. }finally{
    18. JDBCUtils.closeResource(conn, null);
    19. }
    20. }

     查询多条记录并且封装为键值

    1. /*
    2. * MapListHander:是ResultSetHandler接口的实现类,对应表中的多条记录。
    3. * 将字段及相应字段的值作为map中的key和value。将这些map添加到List中
    4. */
    5. @Test
    6. public void testQuery4(){
    7. Connection conn = null;
    8. try {
    9. QueryRunner runner = new QueryRunner();
    10. conn = JDBCUtils.getConnection3();
    11. String sql = "select id,name,email,birth from customers where id < ?";
    12. MapListHandler handler = new MapListHandler();
    13. List> list = runner.query(conn, sql, handler, 23);
    14. list.forEach(System.out::println);
    15. } catch (SQLException e) {
    16. e.printStackTrace();
    17. }finally{
    18. JDBCUtils.closeResource(conn, null);
    19. }
    20. }

    特殊查询:查询表中记录个数 

    使用scalarHandler满足特殊查询需求

    1. /*
    2. * ScalarHandler:用于查询特殊值
    3. */
    4. @Test
    5. public void testQuery5(){
    6. Connection conn = null;
    7. try {
    8. QueryRunner runner = new QueryRunner();
    9. conn = JDBCUtils.getConnection3();
    10. String sql = "select count(*) from customers";
    11. ScalarHandler handler = new ScalarHandler();
    12. Long count = (Long) runner.query(conn, sql, handler);
    13. System.out.println(count);
    14. } catch (SQLException e) {
    15. e.printStackTrace();
    16. }finally{
    17. JDBCUtils.closeResource(conn, null);
    18. }
    19. }

    特殊查询:查询最大日期 

    1. @Test
    2. public void testQuery6(){
    3. Connection conn = null;
    4. try {
    5. QueryRunner runner = new QueryRunner();
    6. conn = JDBCUtils.getConnection3();
    7. String sql = "select max(birth) from customers";
    8. ScalarHandler handler = new ScalarHandler();
    9. Date maxBirth = (Date) runner.query(conn, sql, handler);
    10. System.out.println(maxBirth);
    11. } catch (SQLException e) {
    12. e.printStackTrace();
    13. }finally{
    14. JDBCUtils.closeResource(conn, null);
    15. }
    16. }

     三、自定义resultsethandler的实现类

    1. *
    2. * 自定义ResultSetHandler的实现类
    3. */
    4. @Test
    5. public void testQuery7(){
    6. Connection conn = null;
    7. try {
    8. QueryRunner runner = new QueryRunner();
    9. conn = JDBCUtils.getConnection3();
    10. String sql = "select id,name,email,birth from customers where id = ?";
    11. //我们自己定义了一个handler并且重写了其中的方法
    12. ResultSetHandler handler = new ResultSetHandler(){
    13. @Override
    14. public Customer handle(ResultSet rs) throws SQLException {
    15. //其实下面的query的返回值,其实就是我们现在这个当前方法的返回值
    16. // System.out.println("handle");
    17. // return null;
    18. // return new Customer(12, "成龙", "Jacky@126.com", new Date(234324234324L));
    19. if(rs.next()){
    20. int id = rs.getInt("id");
    21. String name = rs.getString("name");
    22. String email = rs.getString("email");
    23. Date birth = rs.getDate("birth");
    24. Customer customer = new Customer(id, name, email, birth);
    25. return customer;
    26. }
    27. return null;
    28. }
    29. };
    30. Customer customer = runner.query(conn, sql, handler,23);
    31. System.out.println(customer);
    32. } catch (SQLException e) {
    33. e.printStackTrace();
    34. }finally{
    35. JDBCUtils.closeResource(conn, null);
    36. }
    37. }

    四、关闭连接 

    之前手动关闭数据库连接池的写法 

    1. /**
    2. * 关闭连接和Statement的操作
    3. */
    4. public static void closeResource(Connection conn,Statement ps){
    5. try {
    6. if(ps != null)
    7. ps.close();
    8. } catch (SQLException e) {
    9. e.printStackTrace();
    10. }
    11. try {
    12. if(conn != null)
    13. conn.close();
    14. } catch (SQLException e) {
    15. e.printStackTrace();
    16. }
    17. }
    18. /**
    19. * 关闭资源操作
    20. */
    21. public static void closeResource(Connection conn,Statement ps,ResultSet rs){
    22. try {
    23. if(ps != null)
    24. ps.close();
    25. } catch (SQLException e) {
    26. e.printStackTrace();
    27. }
    28. try {
    29. if(conn != null)
    30. conn.close();
    31. } catch (SQLException e) {
    32. e.printStackTrace();
    33. }
    34. try {
    35. if(rs != null)
    36. rs.close();
    37. } catch (SQLException e) {
    38. e.printStackTrace();
    39. }
    40. }

     使用Dbutils工具类实现资源关闭的写法

    1. /**
    2. * 使用dbutils.jar中提供的DbUtils工具类,实现资源的关闭
    3. */
    4. public static void closeResource1(Connection conn,Statement ps,ResultSet rs){
    5. //直接关闭
    6. try {
    7. DbUtils.close(conn);
    8. } catch (SQLException e) {
    9. e.printStackTrace();
    10. }
    11. try {
    12. DbUtils.close(ps);
    13. } catch (SQLException e) {
    14. e.printStackTrace();
    15. }
    16. try {
    17. DbUtils.close(rs);
    18. } catch (SQLException e) {
    19. e.printStackTrace();
    20. }
    21. //或者是悄无声息地关闭掉,也就是是将上面的try catch一并封装进去
    22. DbUtils.closeQuietly(conn);
    23. DbUtils.closeQuietly(ps);
    24. DbUtils.closeQuietly(rs);
    25. }

  • 相关阅读:
    图解计算机内部的高速公路 —— 总线系统
    数据结构:二叉树基础
    【Java多数据源实现教程】实现动态数据源、多数据源切换方式
    B+tree - B+树深度解析+C语言实现+opencv绘图助解
    如何写出优雅的代码?
    65 编辑距离
    【3D游戏建模全流程教学】使用3dsmax与UE4制作世界末日地铁场景
    Day23-JDBC
    基于android的移动学习平台(前端APP+后端Java和MySQL)
    01背包问题
  • 原文地址:https://blog.csdn.net/weixin_62684026/article/details/126259495