热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

使用DBUtils工具类对mysql数据库操作(二)

使用DBUtils工具类对mysql数据库操作第二节使用DBUtils工具类文章目录使用DBUtils工具类对mysql数据库操作前言一、介绍DBUtils工具类二、实现DBUt

使用DBUtils工具类对mysql数据库操作

第二节 使用DBUtils工具类




文章目录

  • 使用DBUtils工具类对mysql数据库操作
  • 前言
  • 一、介绍DBUtils工具类
  • 二、实现DBUtils工具类
    • 1.新建项目,在src目录下创建lib目录,导入相关jar包(如有需要,可下方评论)
    • 2.在src目录下,新建一个db.properties配置文件
    • 3.在db.properties文件中写入连接数据库数据
    • 4.在src目录下,新建utils包,创建DBUtils工具类
  • 三、测试DBUtils工具类
    • 1.在src目录下,新建bean包,创建Users实体类
    • 2.在src目录下,新建test包,创建DBUtilsTest测试类
  • 总结




前言

在上一节说到,在每次查询时候,都会有很多冗余代码,那么可不可以运用封装的思想封装冗余代码呢,接下来将介绍一个DBUtils的工具类,来简化代码书写。




一、介绍DBUtils工具类

使用JDBC技术是一件繁琐的事情,为了使数据库更加高效,有一种简化jdbc技术的操作----DBUtils。DbUtils(org.apache.commons.dbutils.DbUtils)是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
DbUtils类主要负责装载驱动、关闭连接的常规工作。

QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。它包含以下几个方法:


  1. query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
  2. query(String sql, Object[] params, ResultSetHandler rsh):方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。
  3. query(Connection conn, String sql, ResultSetHandler rsh):执行无需参数的选择查询。
  4. update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。

其中ResultSetHandler接口(org.apache.commons.dbutils.ResultSethandler)执行处理一个结果集对象,将数据转变并处理为任何一种形式,供其他应用使用。实现类如下:


方法作用
ArrayHandler把结果集中的第一行数据转成对象数组
ArrayListHandler把结果集中的每一行数据都转成一个对象数组,再存放到List中
BeanHandler将结果集中的第一行数据封装到一个对应的JavaBean实例中
BeanListHandler将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里
MapHandler将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值
MapListHandler将结果集中的每一行数据都封装到一个Map里,然后再存放到List
ColumnListHandler将结果集中某一列的数据存放到List中
KeyedHandler将结果集中的每一行数据都封装到一个Map里(List),再把这些map再存到一个map里,其key为指定的列
ScalarHandler将结果集第一行的某一列放到某个对象中

感谢https://blog.csdn.net/qq_27869123/article/details/81138638文章提供的详细介绍。


二、实现DBUtils工具类


1.新建项目,在src目录下创建lib目录,导入相关jar包(如有需要,可下方评论)

在这里插入图片描述


2.在src目录下,新建一个db.properties配置文件

在这里插入图片描述
在这里插入图片描述


3.在db.properties文件中写入连接数据库数据

代码如下:

##mysql驱动
driver=com.mysql.jdbc.Driver
##连接数据库的地址
url=jdbc:mysql://localhost:3306/jdbc
##数据库用户名
user=root
##数据库密码
password=root

这样写降低了代码的耦合性,以后需要改变连接相关数据,可以直接在此次修改。


4.在src目录下,新建utils包,创建DBUtils工具类

代码如下:

//连接数据库封装
public class JDBCUtils {private static String driver;private static String url;private static String user;private static String password;//获取4个值,并且加载驱动//文件的读取,只需要读取一次即可拿到这些值。使用静态代码块static{//创建Properties集合类。Properties properties = new Properties();try {//读取资源文件,获取值。//获取src路径下的文件的方式--->ClassLoader 类加载器properties.load(JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties"));//获取数据,赋值driver = properties.getProperty("driver");url = properties.getProperty("url");user = properties.getProperty("user");password = properties.getProperty("password");//加载驱动Class.forName(driver);} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}//对外提供一个获取Connection的方法public static Connection getConn(){try {return DriverManager.getConnection(url,user,password);} catch (SQLException e) {e.printStackTrace();}return null;}
}

这样就实现一个简单的JDBCUtils 工具类啦,接下来进行测试。


三、测试DBUtils工具类


1.在src目录下,新建bean包,创建Users实体类

代码如下:

/*** CREATE TABLE `users` (* `user_id` bigint(11) NOT NULL AUTO_INCREMENT,* `user_name` varchar(30) NOT NULL,* `user_age` bigint(11) NOT NULL,* `user_weight` double DEFAULT NULL,* PRIMARY KEY (`user_id`)* ) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8;*/public class Users {private Long user_id;private String user_name;private Long user_age;private Double user_weight;@Overridepublic String toString() {return "Users{" +"user_id=" + user_id +", user_name='" + user_name + '\'' +", user_age=" + user_age +", user_weight=" + user_weight +'}';}public Users() {}public Users(Long user_id, String user_name, Long user_age, Double user_weight) {this.user_id = user_id;this.user_name = user_name;this.user_age = user_age;this.user_weight = user_weight;}public Long getUser_id() {return user_id;}public void setUser_id(Long user_id) {this.user_id = user_id;}public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name = user_name;}public Long getUser_age() {return user_age;}public void setUser_age(Long user_age) {this.user_age = user_age;}public Double getUser_weight() {return user_weight;}public void setUser_weight(Double user_weight) {this.user_weight = user_weight;}
}

对应数据库userinfo表结构,如下图:
在这里插入图片描述


2.在src目录下,新建test包,创建DBUtilsTest测试类

添加数据代码如下:

public class DBUtilsTest {public static void main(String[] args) {addUser(); //添加一条数据}private static void addUser() {//1.生成一个queryRunner对象QueryRunner queryRunner = new QueryRunner();//2.编写sqlString sql = "insert into userinfo values(?,?,?,?)";//3.打印sqlSystem.out.println(sql);//4.传入参数处理Object params[] = {23,"李四",23,54};//5.执行并返回结果try {//queryRunner.update将返回一个数字,如果大于0表示操作成功int rows = queryRunner.update(JDBCUtils.getConn(),sql,params);if (rows > 0){System.out.println("执行成功");}} catch (SQLException e) {e.printStackTrace();}}
}

查询所有数据代码如下:

public class DBUtilsTest {public static void main(String[] args) {queryAllUsers(); //查询所有数据}private static void queryAllUsers() {//1.生成一个queryRunner对象QueryRunner queryRunner = new QueryRunner();//2.编写sqlString sql = "select * from userinfo";//3.打印sqlSystem.out.println(sql);//4.传入参数处理//5.执行并返回结果List<Users> usersList = null;try {//将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里usersList = queryRunner.query(JDBCUtils.getConn(),sql,new BeanListHandler<Users>(Users.class));if (usersList != null && usersList.size() > 0){//遍历并输出结果集for (Users users : usersList){System.out.println(users);}}} catch (SQLException e) {e.printStackTrace();}}
}



总结

是不是感觉更加简单呢,其实还有一种更简单的方法,那就是数据库连接池,我们下一节就会进行介绍。


推荐阅读
  • 如何从python读取sql[mysql基础教程]
    从python读取sql的方法:1、利用python内置的open函数读入sql文件;2、利用第三方库pymysql中的connect函数连接mysql服务器;3、利用第三方库pa ... [详细]
  • Linux环境下MySQL查询结果导出及ERROR 1290 (HY000) 解决方案
    本文详细解析了在Linux系统中使用MySQL导出查询结果时遇到的ERROR 1290 (HY000)错误,并提供了有效的解决策略。通过调整配置文件或更改导出路径,可以轻松解决这一常见问题。 ... [详细]
  • 本文详细介绍了MySQL中的存储过程,包括其定义、优势与劣势,并提供了创建、调用及删除存储过程的具体示例,旨在帮助开发者更好地利用这一数据库特性。 ... [详细]
  • 最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品ling取参考你的选题刚好在下面有,有时间看到机会给您发1ssm资源循环利用2springboot校园考勤系统3ssm防 ... [详细]
  • 为何我选择了华为云GaussDB数据库
    本文分享了作者选择华为云GaussDB数据库的理由,详细介绍了GaussDB(for MySQL)的技术特性和优势,以及它在金融和互联网行业的应用场景。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 如何处理MySQL命令行中文乱码问题
    本文详细探讨了MySQL命令行中出现中文乱码的原因及解决方案,通过调整配置文件和执行特定SQL命令来确保字符集正确设置,为用户提供了一个有效的解决路径。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • python开发mysql:单表查询&多表查询
    一单表查询,以下是表内容二多表查询,一下是表内容三总结&表创建过程单 ... [详细]
  • MySQL 进阶:避免误用 update 影响行数进行业务逻辑判断
    在日常的业务开发中,使用 SQL 的 update 语句来更新数据是一项常见的操作。然而,直接依赖于 update 语句返回的影响行数来进行业务逻辑判断可能会遇到一些意想不到的问题。本文将深入探讨这一问题,并提供解决方案。 ... [详细]
  • APM(Application Performance Management,应用性能管理)对于提供互联网服务的企业至关重要。本文将深入探讨APM如何帮助识别和解决导致用户流失的技术问题,以及它在提升整体用户体验方面的作用。 ... [详细]
author-avatar
楼兰祈珞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有