DBUtils介绍与使用

article/2025/10/3 0:07:56

目录

  • 一、DBUtils介绍
  • 二、DBUtils使用
    • (一)导入相关Jar包
    • (二)使用DBUtils完成数据库操作

一、DBUtils介绍

DBUtils:是为了简化JDBC的快发而产生的开发工具包,是对JDBC的一种封装。

DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean。

在使用DBUtils之前,应该注意一些问题:

1、DBUtils是JDBC的简单封装,可以和JDBC混合使用。
  2、DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足JavaBean的规范,其次Bean的getter与setter方法的名字与结果集的列名一一对应,而不要求JavaBean的私有成员与表结果集列名一一对应。
  3、DBUtils可以将结果集封装为各种类型,主要有:Bean/List,Map/List/Map,数组/List<数组>,列/List<列>,这些类型。
  4、DBUtils执行插入操作的时候,无法返回自增主键,这是一个很严重的问题,当然不能怪DBUtils,可以通过变通的方法来实现,比如在MySQL中,执行完了一个插入SQL后,接着执行SELECT LAST_INSERT_ID()语句,就可以获取到自增主键。
  5、DBUtils的性能和JDBC性能是一样,测试过程中没发现性能损失,拥有了很高性能的同时,而不失JDBC的灵活性。
  6、对于JavaBean的成员类型定义,有一条原则那就是:尽可能使用包装类型,而不要使用基本类型。如果数据库中的值为null,那么将会报错.

二、DBUtils使用

(一)导入相关Jar包

创建工程 day1_jdbc,导入相关jar包,然后 add to build path(文末有jar包下载地址)。

导入jar包

(二)使用DBUtils完成数据库操作

  • 加载驱动
  • 获取连接
  • 获得执行sql语句的对象
  • 处理得到的数据集
  • 释放资源

1. 首先需要进行初步测试 “连接数据库”,代码如下:

package day1_jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class Test01 {public static void main(String args[]) {String driverClassName = "com.mysql.cj.jdbc.Driver";String url="jdbc:mysql://localhost:3306/student?serverTimezone=UTC";String userName = "root";String password = "068835";Connection conn = null;try {Class.forName(driverClassName);        conn = DriverManager.getConnection(url, userName, password);System.out.println("获取数据库连接成功!");Statement st = conn.createStatement();ResultSet rs = st.executeQuery("select * from mine");  // mine 为表的名称while (rs.next()) {System.out.print(rs.getInt("Sno"));System.out.print(rs.getString("Sname"));System.out.print(rs.getInt("Sage"));System.out.println();}} catch (Exception e) {e.printStackTrace();}}
}

结果如下图所示:
Test01运行结果
2. DBUtils的类
(1) QueryRunner
Dbutils的核心类之一,它显著的简化了SQL查询。
它的方法有:
update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。
(2) 查询
① ArrayHandler
将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值。
② ArrayListHandler
将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
③ BeanHandler
将结果集中第一条记录封装到一个指定的javaBean中。
④ BeanListHandler
将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。
⑤ ColumnListHandler
将结果集中指定的列的字段值,封装到一个List集合中。

3. 使用(对数据进行插入、更新、删除、查找等操作)
代码如下:

package day1_jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;public class Test02 {public static void main(String args[]) {insert();//插入\update();//更新delete();//删除select();//查找}public static void insert() {Connection conn = connectDB();   // 获取数据库连接QueryRunner runner = new QueryRunner();//QueryRunner是DBUtils的核心类之一,它显著的简化了SQL查询String sql = "insert into mine(Sno,Sname,Sage) values(1800004,'刘二',18)";int num;try {num = runner.update(conn,sql);System.out.println("插入了" + num + "组数据");} catch(SQLException e) {e.printStackTrace();}DbUtils.closeQuietly(conn);  // 关闭数据库连接}public static void update() {Connection con = connectDB();QueryRunner runner = new QueryRunner();String sql = "update mine set Sname = '王五1' where Sno = 1800000";try {int num = runner.update(con,sql);System.out.println("更新了" + num + "组数据");} catch(SQLException e) {e.printStackTrace();}DbUtils.closeQuietly(con);  // 关闭数据库连接}public static void delete() {Connection con = connectDB();QueryRunner runner = new QueryRunner();String sql = "delete from mine where Sno = 1800005";try {int num = runner.update(con,sql);System.out.println("删除了" + num + "组数据");} catch(SQLException e) {System.out.println("无法找到该组数据,删除失败");}DbUtils.closeQuietly(con);  // 关闭数据库连接}public static void select()  {Connection con = connectDB();try {QueryRunner qr = new QueryRunner();String sql = "select Sno,Sname from mine where Sage = ? ";//注意sql语句中的筛选项(username,password)一定要包括下列list中的参数项(username)Object [] param = {18};List<Object> list = qr.query(con,sql,new ColumnListHandler<Object>("Sname"),param);//若没有查询到则list.size()=0for (Object o : list) {System.out.println(o + "\t");}} catch(Exception e) {e.printStackTrace();}	       DbUtils.closeQuietly(con);}public static Connection connectDB() {	String driverClassName = "com.mysql.cj.jdbc.Driver";String url="jdbc:mysql://localhost:3306/student?serverTimezone=UTC";String userName = "root";String password = "068835";Connection conn = null;try {Class.forName(driverClassName);        conn = DriverManager.getConnection(url, userName, password);System.out.println("\n获取数据库连接成功!");} catch (Exception e) {e.printStackTrace();}return conn;}
}

结果如图:
在这里插入图片描述
以上就是我对DBUtils介绍与使用的理解,如有不对地方恳请指正。

[注]
commons-dbutils-1.7.jar下载地址:link1.
mysql-connector-java-8.0.21.jar下载地址:link2.


http://chatgpt.dhexx.cn/article/VlM5WuGU.shtml

相关文章

DBUtils详解

目录 DBUtils查询数据 匿名内部类方式 反射方式 反射方式查询数据的触发器分类 多表查询 DBUtils增加,删除,修改数据 前言 使用DBUtils操作数据库,会更加的方便,因为它封装了JDBC的代码,这里我们配合c3p0使用 并不是说一定要用c3p0,因为使用DBUtils 的时候需要手动传递…

JavaWeb——(13)DBUtils

目录 一、DBUtils介绍 二、DBUtils核心对象 三、DBUtils使用简单案例 四、QueryRunner对象 4.1构造函数 4.2方法 五、ResultSetHandler接口 六、DBUtils控制事务 6.1ThreadLocal 6.2模拟转账业务 一、DBUtils介绍 DBUtils是java编程中的数据库操作实用工具&#xff…

DBUtils工具类的使用方法详解

DBUtils使用方法详解 目录 DBUtils使用方法详解一、前言二、JDBC介绍1.基本概念2.JDBC访问数据库的流程 三、DBUtils介绍1.基本概念2.配置文件3.创建JDBCUtils类4.实现对数据表的增删改查 四、对以上代码的说明五、总结 一、前言 本文是关于DBUtils使用方法的介绍&#xff0c;…

如何用计算机解kkt条件,【直观详解】拉格朗日乘法和KKT条件

【阅读时间】8min - 10mun 【内容简介】直观的解读了什么是拉格朗日乘子法,以及如何求解拉格朗日方程,并且给出几个直观的例子,针对不等式约束解读了KKT条件的必要条件和充分条件 What & Why 拉格朗日乘法(Lagrange multiplier)是一种在最优化的问题中寻找多元函数在其变…

SVM中的KKT条件和拉格朗日对偶

首先&#xff0c;我们要理解KKT条件是用来干嘛的&#xff1f; KKT条件用来判断一个解是否属于一个非线性优化问题。 求最优解&#xff1a; 约束条件分为 1、等式约束 2、不等式约束 对于等式约束的优化问题&#xff0c;可以直接应用拉格朗日乘子法去求取最优值&#xff1b; …

KKT条件详解

KKT条件详解 主要参考这篇文章和这个知乎回答。 KKT最优化条件是Karush[1939]&#xff0c;以及Kuhn和Tucker[1951]先后独立发表出來的。这组最优化条件在Kuhn和Tucker发表之后才逐渐受到重视&#xff0c;因此许多情况下只记载成库恩塔克条件&#xff08;Kuhn-Tucker conditions…

KKT条件总结

最近学习的时候用到了最优化理论&#xff0c;但是我没有多少这方面的理论基础。于是翻了很多大神的博客把容易理解的内容记载到这篇博客中。因此这是篇汇总博客&#xff0c;不算是全部原创&#xff0c;但是基础理论&#xff0c;应该也都差不多吧。因才疏学浅&#xff0c;有纰漏…

KKT条件

无约束优化 首先给出一些基本概念定义&#xff1a; 凸集&#xff1a; 欧式空间中&#xff0c;集合中任意两点的连线都在集合中&#xff0c;我们就说这个集合是凸集&#xff1b;凸函数&#xff1a; 对于任意属于[0,1]的a和任意属于凸集的两点x, y&#xff0c;有 f ( a x ( 1 …

KKT 直观理解

KKT最优化条件是Karush[1939]&#xff0c;以及Kuhn和Tucker[1951]先后独立发表出來的。这组最优化条件在Kuhn和Tucker发表之后才逐渐受到重视&#xff0c;因此许多情况下只记载成库恩塔克条件&#xff08;Kuhn-Tucker conditions) 库恩塔克条件(Kuhn-Tucker conditions)是非线性…

判断kkt条件的例题_kkt条件例题(kkt条件例题求解)

kkt条件例题(kkt条件例题求解) 2020-05-08 10:54:39 共10个回答 要看目标函数的斜率,不能单凭横坐标或纵坐标确定追问能举例说明吗回答一般线性规划的图像解法是通过平移一条直线,观察与可行域的焦点来求极值的这个还是线性规划里比较基础的问题.建议你找一本线性规划的书或者是…

kkt条件的理解_直观理解KKT条件

KKT最优化条件是Karush[1939],以及Kuhn和Tucker[1951]先后独立发表出來的。这组最优化条件在Kuhn和Tucker发表之后才逐渐受到重视,因此许多情况下只记载成库恩塔克条件(Kuhn-Tucker conditions) 库恩塔克条件(Kuhn-Tucker conditions)是非线性规划领域里最重要的理论成果之一…

对偶专题——KKT条件

[对偶专题——Duality and Dual problem (一) https://blog.csdn.net/jmh1996/article/details/85030323] 对于一般的带约束的优化问题&#xff1a; 介绍了如何通过构造原优化目标的一个下界函数 L ( x , λ , u ) L(x,\lambda,u) L(x,λ,u)&#xff0c;这一般通过添加一些线性…

java telnet端口_Java 实现 telnet命令 验证主机端口的连通性

Java 实现 telnet命令 验证主机端口的连通性 1、Telnet 命令 Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在…

解决阿里云服务器telnet端口不成功的问题

问题还原 阿里服务器部署了一个API站点&#xff0c;端口为8079&#xff0c;本地电脑怎么telnet到这个端口都不成功 排查 防火墙 要么把防火墙全部关闭&#xff0c;或者配置入站出站规则&#xff0c;这里我是直接关闭服务器的防火墙 查看端口是否正常监听 确保系统内部必须…

能ping通,但是telnet端口连接失败

背景&#xff1a;在windows上创建了客户端&#xff0c;使用腾讯云的轻量服务器创建的Linux服务器。 问题&#xff1a;服务器操作系统防火墙已关闭&#xff0c;使用ping命令没问题&#xff0c;但是使用telnet测试端口的时候&#xff0c;连接失败。 解决&#xff1a;一开始添加了…

telnet端口不通怎么解决(单边不通的方法建议)

telnet端口不通是大家在检测端口的时候可能会遇到的问题之一&#xff0c;遇到这种状况一般要如何解决呢&#xff1f;这里为各位带来分享&#xff0c;看一下telnet端口不通的解决方式&#xff0c;看一下如何处理吧。 telnet端口不通怎么解决 1.开放供应商服务器端口 总是出现…

telnet服务器端口

telnet服务器端口 1.Windows 机器使用telnet命令1.2开启telnet功能1.2 使用telnet 1.Windows 机器使用telnet命令 1.2开启telnet功能 可以通过下面步骤进入程序和功能 然后找到启用或关闭Windows功能 然后勾选上Telnet客户端&#xff0c;代表功能开启。 1.2 使用telnet …

telnet命令及测试网络端口的几种方法

1、常见的用法&#xff1a; telnet IP port 如&#xff1a;telnet 192.168.1.10 80 端口&#xff0c;如果端口没有开启监听则会显示连接失败。 若端口有开启监听&#xff0c;telnet端口是通的会显示一个白色的光标并闪烁&#xff0c;如下图&#xff1a; 2、Linux下其余几种测…