热门标签 | 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();}}
}



总结

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


推荐阅读
  • 本文介绍了Paxos的世界中关于复制日志与状态机的概念和重要性。通过存储日志来实现数据的持久化,并通过日志流来记录数据的变化,而不是直接持久化数据本身。这样做的好处是简化了持久化存储的操作,并且方便多机之间的数据同步。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
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社区 版权所有