博主声明:

转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主 威威喵 原创,请多支持与指教。

本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/smile_running

  • DBUtils工具包

DBUtils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化JDBC编码的工作量,同时也不会影响程序的性能。

QueryRunner类简单化了SQL查询,它与ResultSetHandler接口组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。ResultSetHandler接口提供将数据按要求转换为另一种形式。

一、常用实现类

1、BeanHandler

将结果集中的第一行数据封装到一个对应的JavaBean实例中

例如:

 @Testpublic void testBeanHandler() {QueryRunner queryRunner = new QueryRunner();Connection conn = null;try {conn = JdbcUtils.getConnectionForC3P0();String sql = "select username,password,register_time,sex,user_role,id_card from user where username=?";User user = queryRunner.query(conn, sql, new BeanHandler<>(User.class), "小王");System.out.println(user);} catch (Exception e) {e.printStackTrace();} finally {if (conn != null) {JdbcUtils.release(null, conn, null);}}}

2、BeanListHandler

将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里

例如:

 @Testpublic void testBeanListHandler() {QueryRunner queryRunner = new QueryRunner();Connection conn = null;try {conn = JdbcUtils.getConnectionForC3P0();String sql = "select username,password,register_time,sex,user_role,id_card from user";List<User> user = queryRunner.query(conn, sql, new BeanListHandler<>(User.class));System.out.println(user);} catch (Exception e) {e.printStackTrace();} finally {if (conn != null) {JdbcUtils.release(null, conn, null);}}}

3、MapHandler

将结果集中的第一行数据封装为一个Map

例如:

 @Testpublic void testMapHandler() {QueryRunner queryRunner = new QueryRunner();Connection conn = null;try {conn = JdbcUtils.getConnectionForC3P0();String sql = "select username,password,register_time,sex,user_role,id_card from user where username=?";Map<String, Object> user = queryRunner.query(conn, sql, new MapHandler(), "小王");System.out.println(user);} catch (Exception e) {e.printStackTrace();} finally {if (conn != null) {JdbcUtils.release(null, conn, null);}}}

4、MapListHandler

将结果集中的每一行数据都封装到一个Map里,然后再存放到List

例如:

 @Testpublic void testMapListHandler() {QueryRunner queryRunner = new QueryRunner();Connection conn = null;try {conn = JdbcUtils.getConnectionForC3P0();String sql = "select username,password,register_time,sex,user_role,id_card from user";List<Map<String, Object>> user = queryRunner.query(conn, sql, new MapListHandler());System.out.println(user);} catch (Exception e) {e.printStackTrace();} finally {if (conn != null) {JdbcUtils.release(null, conn, null);}}}

5、ScalarHandler

将结果集中的单个值返回

例如:

 @Testpublic void testScalarHandler2() {QueryRunner queryRunner = new QueryRunner();Connection conn = null;try {conn = JdbcUtils.getConnectionForC3P0();String sql = "select register_time from user where id_card=?";Object register_time = queryRunner.query(conn, sql, new ScalarHandler(), "321...");System.out.println(register_time);} catch (Exception e) {e.printStackTrace();} finally {if (conn != null) {JdbcUtils.release(null, conn, null);}}}

6、需注意的坑

通过BeanHandler和BeanListHandler得到的结果集会有不存在(NULL)的情况,比如这种情况下就会导致NULL,图:

出现这种情况的原因是:实体类(User)中的对应属性名与数据库的字段(列名)无法匹配,数据库的数据如下图:

其中register_time、user_role、id_card与类变量registerTime、userRole、idCard无法对应赋值,这也是BeanHandler的一种缺陷,而其它如MapHandler、ScalarHandler就不会出现这种情况。

原因是:MapHandler、ScalarHandler的底层运用了反射来获取元数据的列名,所以它可以获取的到结果。

©原文链接:https://blog.csdn.net/smile_Running/article/details/87009755

©作者博客 ID:smile_running

DBUtils 的使用与踩坑记录相关推荐

  1. 为Jupyter notebook配置R kernel过程及踩坑记录

    为Jupyter notebook配置R kernel过程及踩坑记录 注意:本文为作者安装过程及折腾的过程,内容比较冗杂,如果读者想直接创建一个属于自己的子环境则参考: 如下文章: anaconda下 ...

  2. Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子

    Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子 目录 Python打包工具Pyintealler打包py文件为windows exe文件过程 ...

  3. TVM: Deep Learning模型的优化编译器(强烈推荐, 附踩坑记录)

    本文作者是阿莱克西斯,原载于知乎,雷锋网(公众号:雷锋网)获得授权转载. (前排提醒,本文的人文内容部分稍稍带有艺术加工,请保持一定的幽默感进行阅读) 关注我最近想法的同学应该知道我最近都在把玩 TV ...

  4. 使用Java读取 “Python写入redis” 的数据踩坑记录

    https://my.oschina.net/u/2338224/blog/3061507 使用Java读取 "Python写入redis" 的数据踩坑记录 https://seg ...

  5. osx php7 imagick,[PHP] MacOS 自带php环境安装imagick扩展踩坑记录 | 码农部落

    前言 最近学习yii2,在搭建环境后,发现在访问contact页面时报错,如下: "Either GD PHP extension with FreeType support or Imag ...

  6. vue-i18n使用及踩坑记录

    使用步骤 1. 安装 npm i vue-i18n 2. vue-cli下使用 //1. 引入 vue-i18n import Vue from 'vue' import VueI18n from ' ...

  7. SpringBoot踩坑记录 Invalid bound statement (not found)引发的一些列问题

    SpringBoot踩坑记录 Invalid bound statement (not found)引发的一些列问题 当你开开心心搭建了一个SpringBoot项目,用插件生成了entity.dao. ...

  8. mysql 使用sum limit_mysql踩坑记录之limit和sum函数混合使用问题

    问题复盘 本次复盘会用一个很简单的订单表作为示例. 数据准备 订单表建表语句如下(这里偷懒了,使用了自增ID,实际开发中不建议使用自增ID作为订单ID) CREATE TABLE `order` ( ...

  9. 【踩坑记录】Tensorflow在Windows下使用

    [踩坑记录]Tensorflow在Windows下使用 TensorFlow 是一个端到端开源机器学习平台 安装 pip3 install tensorflow 使用时报错如下 2021-04-21 ...

最新文章

  1. Python爬虫实战,pyecharts模块,Python数据分析告诉你闲鱼上哪些商品抢手~
  2. tensorflow的mnist改写成pytorch
  3. ES6系列之小知识点
  4. C++ Primer 5th笔记(chap 18 大型程序工具) using指示
  5. 手机和邮箱的正则表达式
  6. BZOJ 2588: Spoj 10628. Count on a tree 树上跑主席树
  7. Linux下执行.sh文件
  8. 1986暑假济南清北学堂腾飞营摸鱼记
  9. 用java实现归并,算法:JAVA实现归并排序
  10. 枚举算法:求两个整数m,n(m>n)最大公约数的欧几里得算法描述。
  11. 解析搜狗实验室精简版数据
  12. 2021-09-18牛客SQL32,SQL33,SQL35,SQL36,SQL37,SQL38,SQL40
  13. OpenCV 离散傅里叶变换
  14. 《智能数据时代:企业大数据战略与实战》一2.3 自我评估、完善度、信息架构...
  15. 怎么成为日上会员直邮_放福利啦,免税店现在一件也能直邮,不用出入境、不用出入境、不用找代购...
  16. 安卓机器人+淘宝客介绍
  17. 2019热门IT技术方向,你更中意哪个?
  18. Linux下 ifconfig 命令的使用(Linux命令)
  19. Android通用流行框架大全,零基础入门学习android
  20. 【Python数据结构与算法】(三):递归(Recursion)

热门文章

  1. Partial Dependence Plots —— 部分依赖图_特征如何影响模型预测
  2. 承接软硬件项目外包开发
  3. 腾讯云服务器如何安装应用软件,腾讯云服务器Ubuntu环境下通过Apt-get安装软件...
  4. Python爬取bilibili番剧排行
  5. 如何创建全球(全局)公司代码 (Global Company Code )
  6. 阿里云部署Django项目发送邮件时,端口25,465,587上的坑
  7. Windows 是一个系统--不应该作为品牌,微软到了抛弃Windows的时候了
  8. 网络基础UDP实例(传一个long类型的值)
  9. PhpStudy PHP8 网站打不开502 bad gateway(静态网页能打开,php打不开)
  10. Linux下,编译程序遇到“undefined reference to XXX” 报错(可针对webots的编译,不同的文件夹下面不同的cpp,.h文件)