当前位置: 首页 > news >正文

JDBC-day07(Apache-DBUtils实现CRUD操作)

九:Apache-DBUtils实现CRUD操作

1 Apache-DBUtils简介

Apache-DbUtils 是 Apache 组织提供的开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用DbUtils能极大简化JDBC编码的工作量,同时也不会影响程序的性能。因此DbUtils成为很多不喜欢Hibernate的公司的首选。
使用Apache-DbUtils之前需要导入它的jar包,官网上会有,或者找国内镜像站找也可以。

2.常用的API及案例

  • org.apache.commons.dbutils.QueryRunner
    • 使用此类可以更快捷的进行删除,添加,修改操作,因为此类封装了我们之前自己写的删除,添加,修改操作。

例:对Customers表进行插入

	@Testpublic void testInsert() {Connection conn = null;        try {QueryRunner runner = new QueryRunner();conn = JDBCUtils.getConnection2();String sql = "insert into customers(name,email,birth)values(?,?,?)";int updateCount = runner.update(conn, sql, "薛之谦","xuezhiqian@168.com",new Date(87654323456L));if(updateCount != 0) {System.out.println("修改了" + updateCount + "条记录");}} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.closeResource(conn, null);}}
  • org.apache.commons.dbutils.ResultSetHandler

    • 定义了查询相关的接口,它的实现类根据其接口进行了具体的操作编写
      
    • ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)
      
  • 接口的主要实现类:

    • ArrayHandler:把结果集中的第一行数据转成对象数组。

    • ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。

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

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

    • ColumnListHandler:将结果集中某一列的数据存放到List中。

    • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。

    • MapHandler :将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

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

    • ScalarHandler :查询单个值对象

例:查询操作
BeanHandler:ResultSetHandler接口的实现类,用于封装表中的一条记录。

	@Testpublic void testQuery1() {Connection conn = null;                              try {QueryRunner runner = new QueryRunner();conn = JDBCUtils.getConnection2();String sql = "select id,name,email,birth from customers where id = ?";BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);Customer customer = runner.query(conn, sql, handler, 23);System.out.println(customer);} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.closeResource(conn, null);}		}

BeanListHandler:ResultSetHandler接口的实现类,用于封装表中的多条记录构成的集合。

	@Testpublic void testQuery2() {Connection conn = null;                              try {QueryRunner runner = new QueryRunner();conn = JDBCUtils.getConnection2();String sql = "select id,name,email,birth from customers where id < ?";BeanListHandler<Customer> handler = new BeanListHandler<>(Customer.class);List<Customer> list = runner.query(conn, sql, handler, 23);list.forEach(System.out::println);//打印出多条记录} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.closeResource(conn, null);}}

MapHandler:ResultSetHandler接口的实现类,对应表中的一条记录。 将字段及相应字段的值作为Map中的Key和Value。

@Test
public void testQuery3() {Connection conn = null;                                         try {QueryRunner runner = new QueryRunner();conn = JDBCUtils.getConnection2();String sql = "select id,name,email,birth from customers where id = ?";MapHandler handler = new MapHandler();Map<String, Object> map = runner.query(conn, sql, handler, 23);System.out.println(map);} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.closeResource(conn, null);}		
}

MapListHandler:ResultSetHandler接口的实现类,对应表中的多条记录。将字段及相应字段的值作为Map中的Key和Value,将这些map添加到List中

@Test
public void testQuery4() {Connection conn = null;                try {QueryRunner runner = new QueryRunner();conn = JDBCUtils.getConnection2();String sql = "select id,name,email,birth from customers where id < ?";MapListHandler handler = new MapListHandler();List<Map<String, Object>> list = runner.query(conn, sql, handler, 23);list.forEach(System.out::println);} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.closeResource(conn, null);}		
}

ScalarHandler:用于查询特殊值

	@Testpublic void testQuery5() {Connection conn = null;        try {QueryRunner runner = new QueryRunner();conn = JDBCUtils.getConnection2();String sql = "select count(*) from customers";ScalarHandler handler = new ScalarHandler();Long count = (Long)runner.query(conn, sql, handler);System.out.println(count);} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.closeResource(conn, null);}		}@Testpublic void testQuery6() {Connection conn = null;try {QueryRunner runner = new QueryRunner();conn = JDBCUtils.getConnection2();String sql = "select max(birth) from customers";ScalarHandler handler = new ScalarHandler();Date maxBirth = (Date) runner.query(conn, sql, handler);System.out.println(maxBirth);} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.closeResource(conn, null);}		}
  • org.apache.commons.dbutils.DbUtils

    • DbUtils工具类提供如关闭连接、装载JDBC驱动程序等常规操作
      

例:资源关闭

public static void closeResource1(Connection conn,Statement ps,ResultSet rs){           
//		try { 
//			DbUtils.close(conn);
//		} catch (SQLException e) {
//			e.printStackTrace();
//		}
//		try {
//			DbUtils.close(ps);
//		} catch (SQLException e) {
//			e.printStackTrace();
//		}
//		try {
//			DbUtils.close(rs);
//		} catch (SQLException e) {
//			e.printStackTrace();
//		}DbUtils.closeQuietly(conn);DbUtils.closeQuietly(ps);DbUtils.closeQuietly(rs);}

其中可能会出现不少的小问题,请多多包含
感谢大家的支持,关注,评论,点赞!
参考资料:尚硅谷_宋红康_JDBC核心技术

相关文章:

JDBC-day07(Apache-DBUtils实现CRUD操作)

九&#xff1a;Apache-DBUtils实现CRUD操作 1 Apache-DBUtils简介 Apache-DbUtils 是 Apache 组织提供的开源 JDBC工具类库&#xff0c;它是对JDBC的简单封装&#xff0c;学习成本极低&#xff0c;并且使用DbUtils能极大简化JDBC编码的工作量&#xff0c;同时也不会影响程序的…...

零代码编程:用ChatGPT多线程批量将PDF文档转换为word格式

pdf2docx是Python的一个库&#xff0c;可以很方便的将PDF文档转换为word格式&#xff0c;首先安装这个库。 然后在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个文档格式转换的任务&#xff0c;具体步骤如下&#xff1a; 打开F盘的Books文件…...

codeshell安装配置

codeshell安装配置 1 注意事项1.1 Python版本问题 2 codeshell环境搭建2.1 codeshell使用软件各版本2.2 软件下载2.3 codeshell使用环境安装2.3.1 python-3.10.9-amd64.exe安装2.3.2 Anaconda3-2022.10-Windows-x86_64.exe安装2.3.3 创建环境2.3.4 Pytorch安装2.3.5 transforme…...

mfc140u.dll丢失的详细解决方法,最详细修复mfc140u.dll丢失的办法分享

在计算机技术日益发展的今天&#xff0c;我们不可避免地会遇到各种各样的技术问题。其中&#xff0c;“MFC140U.DLL丢失”是一个常见的错误&#xff0c;它可能会影响我们的电脑性能和软件运行。本文将详细介绍四种解决“MFC140U.DLL丢失”问题的方法。 首先&#xff0c;我们需…...

CMake

文章目录 前言一、快速开始编译C/C代码1. 只有源码的项目2. 包含库的项目3. 编译成库给他人使用使用cmake的流程1. 生成构建系统2. 执行构建3. 执行测试4. 安装 && 打包 二、cmake 语法简介1 变量2 条件语句3 脚本命令**消息打印****if-else**:**list命令**&#xff1a…...

互联网Java工程师面试题·Spring篇·第二弹

目录 3、Beans 3.1、什么是 spring bean&#xff1f; 3.2、spring 提供了哪些配置方式&#xff1f; 3.3、spring 支持集中 bean scope&#xff1f; 3.4、spring bean 容器的生命周期是什么样的&#xff1f; 3.5、什么是 spring 的内部 bean&#xff1f; 3.6、什么是 spri…...

AM@两种余项型泰勒公式的对比和总结@常用函数的麦克劳林公式

文章目录 abstract两种余项型泰勒公式的对比和总结Maclaurin公式常用函数的Maclaurin公式推导例求极限按幂展开 abstract 泰勒公式的两种余项型(Penao&Lagrange)泰勒公式的对比和总结常用的Maclaurin公式列举(Peano余项型为主) 两种余项型泰勒公式的对比和总结 Taylor公式…...

Django实现音乐网站 (22)

使用Python Django框架做一个音乐网站&#xff0c; 本篇音乐播放器功能完善&#xff1a;顺序播放、设置播放数、歌词滚动等功能。 目录 顺序播放 设置顺序播放 单曲播放数 添加路由 视图处理 模板处理 歌词滚动 视图内容返回修改 样式设置 模板内容 歌词滚动脚本 歌…...

pnpm ERR_PNPM_ADDING_TO_ROOT

ERR_PNPM_ADDING_TO_ROOT  Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don’t wa…...

统计学习方法 拉格朗日对偶性

文章目录 统计学习方法 拉格朗日对偶性原始问题对偶问题原始问题和对偶问题的关系 统计学习方法 拉格朗日对偶性 读李航的《统计学习方法》时&#xff0c;关于拉格朗日对偶性的笔记。 在许多统计学习的约束最优化问题中&#xff0c;例如最大熵模型和支持向量机&#xff0c;常…...

.rancher-pipeline.yml

一、注意点 其实下文二的image是基于这个镜像作为基础镜像在这个镜像中执行打包&#xff0c;shellScript 当前路径是你代码块与上图settings.xml&#xff0c;图中的settings.xml可以替换下你当前镜像的settings.xml 示例 二、.rancher-pipeline.yml ${CICD_GIT_BRANCH}这些从官…...

RK3588平台开发系列讲解(显示篇)MIPI DSI协议介绍之分层

🚀返回专栏总目录 文章目录 一、MIPI DSI 分层1.1、应用层1.2、协议层1.3、链路层1.4、物理层沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 DSI 全称是 Display Serial Interface,是主控和显示模组之间的串行连接接口。 MIPI DSI 接口分为数据线和时钟线,均为…...

前端学成在线项目详细解析三

19-推荐课程-内容样式 HTML结构 <ul><li><a href"#"><div class"pic"><img src"./uploads/course01.png" alt""></div><div class"text"><h4>JavaScript数据看板项目实战…...

使用Kali进行实验---主机发现

主机发现 【实训目的】 掌握主机扫描的工作原理&#xff0c;学会使用ping等扫描工具&#xff0c;发现网络当中活跃的主机。 【场景描述】 在虚拟机环境下配置4个虚拟系统“Win XP1” “Win XP2” “Kali Linux”和“Metasploitable2”&#xff0c;使得4个系统之间能够相互通…...

美团笔试真题2023第一场(4题)

点评&#xff1a; 题目总体来说偏向于中下难度 1.字符串前缀 题目描述&#xff1a; 现在有两个字符串S和T&#xff0c;你需要对S进行若干次操作&#xff0c;使得S是T的一个前缀&#xff08;空串也是一个前缀&#xff09;。每次操作可以修改S的一个字符&#xff0c;或者删除一个…...

PHP explode (多)分隔符(delimiters) 使用

PHP explode (多)分隔符(delimiters) 使用 问题&#xff1a;[https://blog.csdn.net/YBaog?typeblog] 把链接中所有的字符串取出。 ㊙️ 神秘算法 ㊙️ function multi_explode($delimiters, $string) {$data [];if ($string) {$str str_replace($delimiters, $delimiter…...

AI的Prompt是什么

一.AI的Prompt的作用 在人工智能&#xff08;AI&#xff09;中&#xff0c;"Prompt"通常指的是向AI系统提供的输入或指令&#xff0c;用于引导AI进行特定的操作或生成特定的输出。例如&#xff0c;在一个对话型AI系统中&#xff0c;用户输入的问题就是一个prompt&…...

Qt之自定义model读写CSV文件

一.效果 本文基于QAbstractTableModel实现了一个支持读写CSV文件的TableModel。CSV数据格式虽然很简单,但是网上大多数读写方式其实都是有bug的,没考虑到字段里包含逗号或换行符这种复杂数据的情况。 二.原理 CSV(Comma-Separated Values)文件是一种简单类型的纯文本文件…...

golang 工程组件:grpc-gateway 环境安装+默认网关测试

grpc-gateway grpc-gateway 顾名思义是专门是grpc的网关。也是一个protobuf的编译器&#xff0c;是一个proto的插件。 grpc-gateway就是将http请求处理后转发到对应grpc服务上。很多浏览器&#xff0c;或者客户端开箱不支持grpc&#xff0c;只支持传统的restful API。 grpc网关…...

IP地址SSL证书 IP证书

在许多企业用例中&#xff0c;公司需要SSL证书作为IP地址。公司使用IP地址通过Internet访问各种类型的应用程序。 公网IP地址的SSL证书&#xff1a; 内部IP&#xff08;也称为私有IP&#xff09;是IANA设置为保存的IPv4或IPv6地址&#xff0c;例如&#xff1a; RFC 1918范围内…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...