文章目录

  • 前言
  • DBUtils
    • JavaBean组件
    • DBUtils使用
      • QueryRunner核心类:
      • ResultSetHandler结果集处理类
  • 总结

前言

Java开发基础(二)——JDBC的使用中写到,Java与数据库的连接包括:导包、注册驱动、获取与数据库的连接对象、获取SQL语句的执行者对象、获取结果集对象、关闭连接等。其中连接池包含了注册驱动和获取与数据库连接两个步骤,而dbutils简化了其他步骤。

DBUtils

DBUtils简化了JDBC的开发步骤,使得我们可以用更少量的代码实现连接数据库的功能。DBUtils下载地址

JavaBean组件

JavaBean是一个用于封装数据的类,在与数据库连接之中,JavaBean其的作用是将获取的数据库的记录封装到JavaBean中。特性如下:

  1. 需要实现接口:java.io.Serializable ,可以省略不写。
  2. 提供私有字段:private 类型 字段名;
  3. 提供getter/setter方法:
  4. 提供无参构造

获取getter/setter方法,在类中右键->Source->Generate Getters and Setters

DBUtils使用

DBUtils封装了JDBC的操作,核心功能如下:
Dbutils三个核心功能介绍

  1. QueryRunner中提供对sql语句操作的API.
  2. ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
  3. DbUtils类是一个工具类,定义了关闭资源与事务处理的方法

QueryRunner核心类:

  1. QueryRunner(DataSource ds) ;传入参数为连接池
  2. update(String sql, Object… params) ,执行insert update delete操作
  3. query(String sql, ResultSetHandler rsh, Object… params) ,执行 select操作

ResultSetHandler结果集处理类

# 使用代码

  • Category.java
// JavaBean
public class Category {private String cid;private String cname;public String getCid() {return cid;}public void setCid(String cid) {this.cid = cid;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}@Overridepublic String toString() {return "Category [cid=" + cid + ", cname=" + cname + "]";}public Category() {super();// TODO Auto-generated constructor stub}public Category(String cid, String cname) {super();this.cid = cid;this.cname = cname;}
}
  • C3P0Utils.java
/*** 在C3P0连接池中 遵循了javax.sql.DataSource接口的实现类:*       ComboPooledDataSource*/
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3P0Utils {private static ComboPooledDataSource ds = new ComboPooledDataSource();  // 自动加载C3P0-config.xml文件public static DataSource getDataSource(){return ds;}public static Connection getConnection() throws SQLException{// 获取连接,从C3P0连接池获取return ds.getConnection();}// 关闭所有资源的统一代码public static void closeAll(Connection conn, Statement st, ResultSet rs){//负责关闭if(conn != null){try {conn.close();     // 使用代理,放回到连接池中} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(st != null){try {st.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(rs != null){try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}
  • DBUtilsDemo.java
package cn.simon.jdbc.demo03_DBUtils的使用;import java.sql.SQLException;
import java.util.List;
import java.util.Map;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;import cn.simon.jdbc.domain.Category;/***  DBUtils执行数据库查询操作*   1.QueryRunner(DataSource)*      2.query(String sql, ResultSetHandler<T> rsh, Object... params); // 主要执行查询*/public class DBUtilsDemo {public static void main(String[] args) throws SQLException {// TODO Auto-generated method stub//     queryDemo01();
//      queryDemo02();
//      queryDemo03();
//      queryDemo04();
//      queryDemo05();queryDemo06();
//      queryDemo07();
//      queryDemo08();}// ArrayHandler处理类的使用public static void queryDemo01() throws SQLException{// 1.创建QueryRunner对象QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());// 2.执行查询Object[] objs = qr.query("select * from category where cid = ?", new ArrayHandler(), 1);for(Object o: objs){     // object[]中保存了object对象System.out.println(o);}}// ArrayListHandlerpublic static void queryDemo02() throws SQLException{// 1.创建QueryRunner对象QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());// 2.执行查询List<Object[]> objs = qr.query("select * from category ", new ArrayListHandler());for (Object[] objects : objs) {System.out.println(objects[0]+"\t"+objects[1]);}}// BeanHandler处理类的使用public static void queryDemo03() throws SQLException{// 1.创建QueryRunner对象QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());// 2.执行查询String sql = "select * from category";Category c = qr.query(sql, new BeanHandler<Category>(Category.class));System.out.println(c);}// BeanListHandlerpublic static void queryDemo04() throws SQLException{// 1.创建QueryRunner对象QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());// 2.执行查询String sql = "select * from category";List<Category> c = qr.query(sql, new BeanListHandler<Category>(Category.class));for (Category category : c) {System.out.println(category);}}// ColumnListHandler处理类的使用public static void queryDemo05() throws SQLException{// 1.创建QueryRunner对象QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());// 2.执行查询String sql = "select * from category";List<Object> c = qr.query(sql, new ColumnListHandler<Object>("cname"));System.out.println(c);}// MapHandler处理类的使用public static void queryDemo06() throws SQLException{// 1.创建QueryRunner对象QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());// 2.执行查询String sql = "select * from category";Map<String, Object> map = qr.query(sql, new MapHandler());// 3.System.out.println(map);}// MapListHandler处理类的使用public static void queryDemo07() throws SQLException{// 1.创建QueryRunner对象QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());// 2.执行查询String sql = "select * from category";List<Map<String, Object>> maps = qr.query(sql, new MapListHandler());// 3.ListSystem.out.println(maps);}// MapListHandler处理类的使用public static void queryDemo08() throws SQLException{// 1.创建QueryRunner对象QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());// 2.执行查询String sql = "select count(*) from category";Long count = qr.query(sql, new ScalarHandler<Long>());// 3.ListSystem.out.println(count);}
}

总结

DBUtils主要就是简化JDBC操作,封装虽好,但还是要知道其中的原理才好。

Java开发基础(四)——dbutils的使用相关推荐

  1. java入门基础(四)

    文章目录 (一)对象和类 封装概述: (二)String对象 (三)StringBuilder对象 (四)集合ArrayList:可变的存储模型 练习 ArryayList练习 (一)对象和类 类:类 ...

  2. 转载 java开发基础 https://blog.csdn.net/jiangjiewudi/article/details/9565749

    Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点: 1.掌握项目开发的基本步骤 2.具备极强的面向对象的分析与设计技巧 3.掌握用例驱 ...

  3. 安卓逆向必备之Java开发基础(上)

    文章目录 1.环境搭建 2.初识Java 3.注释 4.变量 6.输入和输出 5.条件语句 6.循环语句 7. 数据类型相关 7.1 整数类型 7.2 字符 7.3 字符串 7.4 数组 7.5 Li ...

  4. java vtk 三维_[WPF VTK]三维图形开发基础(四)

    0.条条大路 前面介绍的使用WPF自己撰写算法实现点数据的三角划分以图实现轮廓的三维重构. 但简单的算法以及不加其他处理效果不佳,对于点数据的三角划分在查阅了一些论文后发现有: 基于图的最短路径.De ...

  5. Java开发基础面试知识点

    目录 Java基础 数据类型 ==和equals的区别 hashcode()和equals()方法 String.StringBuilder.StringBuffer区别 访问权限修饰符 final修 ...

  6. JAVA知识基础(四):深入理解static关键字

    1.static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法.以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成 ...

  7. Java开发基础面试题,Java开发人员不得不收集的代码

    前言 今天的分享主要是讲下这个 redis,什么是缓存雪崩.穿透和击穿.这三个技术问题是我们平时开发工作中和面试过程中,必须要会的知识点,因为目前的互联网系统没有几个不需要用到缓存的,只要用到缓存的话 ...

  8. Java开发基础——配置文件的写入与读取

    在实际的项目开发中,配置文件是一个非常重要的工具,我们可以把全局的配置写入文件,然后在需要的时候再取出来.且在项目的任何位置都可以使用,非常方便.可以把配置文件理解为一个临时性的数据库.在IDEA中, ...

  9. Java开发基础面试题,北大青鸟java培训多久

    Java NIO 基本介绍 Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API.从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被 ...

  10. Java开发基础_03

    五. 面向对象 面向过程 : 以函数为最小单位(方法),数据独立于函数之外,以过程步骤为主(怎么做)-执行者 面向对象 : 以类对象为最小单位,类包括数据+方法,是以对象为主(谁来做)-指挥者 1. ...

最新文章

  1. docker搭建ssr
  2. windows server 2008相关安装
  3. 在adapter中startactivityforresult
  4. 深度学习与计算机视觉系列(10)_细说卷积神经网络
  5. ThreadLocal的原理与使用
  6. css 语音,用css完成语音助手小动画
  7. 网络流(最大流):CodeForces 499E Array and Operations
  8. 马云获福布斯终身成就奖;华为推出首款 4G 芯片 Balong 711;PyPy 7.2 发布 | 极客头条...
  9. 任务管理器中arcsom.exe和arcsoc.exe的个数问题
  10. WiFi 接口创建过程
  11. nvidia卸载程序无法继续运行_nvidia安装程序无法继续 不兼容怎么办 nvidia安装程序无法继续安装怎么办...
  12. 【一起入门DeepLearning】中科院深度学习第五课:正则化「Regularization」和优化「Optimization」
  13. 利用python打开摄像头及颜色检测
  14. vi使用的时候按esc后按**shift + :**时进入不了末行
  15. 2021年最详细的Android屏幕适配方案汇总
  16. 【重磅】2021年通信行业白皮书汇总下载(免费)
  17. 人员规范操作行为识别算法
  18. 班级计算机应用论坛研讨,以“心”育人,处处花开——我校教师参加第四届中小学班主任高峰论坛暨班级管理策略专题研讨会...
  19. 「找一找」考你眼力的时候到了!
  20. #![feature]` may not be used on the stable release channel 问题解决及设置Rust Channel的三种方式

热门文章

  1. Android ROS开发环境搭建
  2. jQuery手机网站导航下拉菜单代码
  3. 小程序毕设作品之微信电子书阅读小程序毕业设计(7)中期检查报告
  4. vbscript运行环境linux,VBScript 是什么?
  5. NotNorthwind-更新#1-您所有的Northwind都属于我们
  6. Y460蓝牙键盘无法连接问题解决
  7. 成为会带团队的技术人 业务理解:深入业务是做好架构的前提
  8. Java解析XML字符串
  9. python强制关闭文件_正在强制删除文件。Python,Windows
  10. 防火墙资源(jetio,comodo,outpost,pc tool,zonealarm pro