利用DBUtils进一步简化JDBC数据库的增删改查的代码,同时利用从连接池中接取连接,进而进行简化和减少资源的消耗!

一、DBUtils:

1、DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。

2、DBUtils是java编程中的数据库操作实用工具,小巧简单实用。

DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

Dbutils三个核心功能介绍

①、QueryRunner中提供对sql语句操作的API;

②、 ResultSetHandler接口,用于定义select操作后,怎样封装结果集;

③、DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法。

二、QueryRunner核心类:

1、update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作(…是可变参数)  有返回值int

2、 query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作

三、update的增删改:

// 新增
public int addSort(Integer sid, String sname) throws SQLException {
// 获取连接对象
// Connection conn = JDBCUtils.getConn();
// 创建QueryRunner对象
// QueryRunner qr = new QueryRunner();
QueryRunner qr = new QueryRunner(MyDBUtils.getDataSource());
String sql = "insert into sort values(?,?)";
// int row = qr.update(conn, sql, sid, sname);
int row = qr.update(sql, sid, sname);
return row;
} // 修改
public int updateSort(Integer sid, String sname) throws SQLException {
// 获取连接对象
Connection conn = JDBCUtils.getConn();
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
String sql = "update sort set sname=? where sid=?";
int row = qr.update(conn, sql, sname, sid);
return row;
} // 删除
public int deleteSort(Integer sid) throws SQLException {
// 获取连接对象
Connection conn = JDBCUtils.getConn();
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
String sql = "delete from sort where sid=?";
int row = qr.update(conn, sql, sid);
return row;
}

四、query查询:

  query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

1、ResultSetHandler(是个接口,需要实现类)结果集处理类:

2、JavaBean:(实体类---以前的domain包)

JavaBean就是一个类,在开发中常用封装数据。具有如下特性:

①、需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。

②、提供私有字段:private 类型 字段名;

③、提供getter/setter方法:

④、提供无参构造

// ArrayListHandler查询
public List<Object[]> get1() throws SQLException {
// 获取连接对象
Connection conn = JDBCUtils.getConn();
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
String sql = "select * from sort ";
List<Object[]> obj = qr.query(conn, sql, new ArrayListHandler());
return obj;
} // BeanHandler查询
public Sort get2(Integer sid, String sname) throws SQLException {
// 获取连接对象
Connection conn = JDBCUtils.getConn();
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
String sql = "select * from sort where sid = ? and sname = ?";
Sort sort = qr.query(conn, sql, new BeanHandler<Sort>(Sort.class), sid, sname);
return sort;
} // BeanListHandler查询
public List<Sort> get3() throws SQLException {
// 获取连接对象
Connection conn = JDBCUtils.getConn();
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
String sql = "select * from sort ";
List<Sort> sort = qr.query(conn, sql, new BeanListHandler<Sort>(Sort.class));
return sort;
}
//ColumnListHandler查询
public List<String> get4() throws SQLException {
// 获取连接对象
Connection conn = JDBCUtils.getConn();
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
String sql = "select * from sort ";
List<String> list = qr.query(conn, sql, new ColumnListHandler<String>("sname"));
return list;
}
//ScalarHandler查询
public Integer get5() throws SQLException {
// 获取连接对象
// Connection conn = JDBCUtils.getConn();
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner(MyDBUtils.getDataSource());
String sql = "select count(*) from sort ";
Long count = qr.query( sql, new ScalarHandler<Long>());
//Long转成Integer
return count.intValue();
}

五、连接池:

1、概述:

  用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。(不调用的话自动归还)

2、规范:

  Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!

常见的连接池:DBCP、C3P0。

3、DBCP连接池:

①、导包:commons-dbcp-1.4.jar       commons-pool-1.5.6.jar

②、编写工具类:

连接数据库表的工具类, 采用DBCP连接池的方式来完成,Java中提供了一个连接池的规则接口 :

  DataSource : 它是java中提供的连接池,作为 DriverManager 工具的替代项。在DBCP包中提供了DataSource接口的实现类,我们要用的具体的连接池 BasicDataSource类:

package com.oracle.tools;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class MyDBUtils {
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/java0603?useUnicode=true&characterEncoding=UTF-8";
public static final String USERNAME = "root";
public static final String PASSWORD = "123456";
/*
* 创建连接池BasicDataSource
*/
public static BasicDataSource dataSource = new BasicDataSource();
//静态代码块(优先只执行一次)
static {
//对连接池对象 进行基本的配置
dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
dataSource.setUrl(URL); //指定要连接的数据库地址
dataSource.setUsername(USERNAME); //指定要连接数据的用户名
dataSource.setPassword(PASSWORD); //指定要连接数据的密码
}
/*
* 返回连接池对象
*/
public static DataSource getDataSource(){
return dataSource;
}
}

3、常见配置项:

JAVA基础之DBUtils与连接池的更多相关文章

  1. java基础(30):DBUtils、连接池

    1. DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils. DBUtils就是JDBC的 ...

  2. Java基础学习笔记二十七 DBUtils和连接池

    DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简化开发 ...

  3. DBUtils和连接池

    今日内容介绍 1.DBUtils 2.连接池 ###01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数 ...

  4. 数据库——DBUtils和连接池

    第一章 DBUtils如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简 ...

  5. Java并发:Executor与连接池

    概述 首先来说一说java连接池中常用到的几个类:Executor,ExecutorService,ScheduledExecutorService Executor 执行已经提交的任务对象.此接口提 ...

  6. 2017.10.21 Java中的数据源与连接池技术

    1.数据源技术就是预先建立好一定的数量的数据库连接,并将这些连接保存在连接池中,有连接池负责对这些数据库连接管理,当访问数据库时,只需要从连接池中取出有空闲状态的数据库连接:当程序访问数据库结束时,释 ...

  7. Python 使用 PyMysql、DBUtils 创建连接池,提升性能

    转自:https://blog.csdn.net/weixin_41287692/article/details/83413775 Python 编程中可以使用 PyMysql 进行数据库的连接及诸如 ...

  8. SQL基础之JDBC、连接池

    JDBC JDBC四个核心对象 这几个类都是在java.sql包中 DriverManager(类): 数据库驱动管理类.这个类的作用:1)注册驱动; 2)创建java代码和数据库之间的连接,即获取C ...

  9. JAVA:当数据库重启后连接池没有自动识别的解决办法

    今天发现服务器上的一个服务程序出现问题,软件抛出:Connection reset by peer: socket write error 无法正常提供服务,找了一下原因,原来是因为数据库服务器重启, ...

随机推荐

  1. spring boot项目maven打包可执行JAR

    在pom.xml中添加如下配置: <!-- 打包可执行jar包 --> <plugin> <groupId>org.springframework.boot< ...

  2. 笔记-Git:资源列表

    ylbtech-笔记-Git:资源列表 Yahoo!, Facebook, Salesforce, Microsoft, Twitter, Deutsche Telekom, Intuit, Mozi ...

  3. 【mybatis】子查询

    networkResource的 resultMap <resultMap id="NetworkResultMap" type="com.chinamobile. ...

  4. 爬虫笔记之teambition登录验证码

    一.缘起 想做的事情太多,计划乱糟糟,想找个工具理一下,想起来了的很久之前用过teambition,打算看一下,然后在登录界面看到一个比较有意思的验证码: 这种倒是比较有意思哈,看着像是模仿12306 ...

  5. Linux磁盘空间查看、磁盘被未知资源耗尽

    Linux系统中,当我们使用rm在Linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄, 那么Linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%, ...

  6. 【Spring Boot学习之七】自定义参数&多环境配置&修改端口号&yml

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.自定义参数通过注解直接获取配置文件application.properties中配置key的value1.appl ...

  7. 搭建基于docker 的redis分布式集群在docker for windows

    https://blog.csdn.net/xielinrui123/article/details/85104446 首先在docker中下载使用 docker pull redis:3.0.7do ...

  8. 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh

    微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构   本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...

  9. qsort与sort

    快排是我们平常敲代码和比赛的时候     经常使用到的方法 qsort是函数库中自带的函数    这是一个标准的快排函数 而sort比qsort更是好用    sort对于不同大小的数组   会使用不 ...

  10. 【转载,备忘】SQL Server 更改跟踪(Chang Tracking)监控表数据

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 主要区别与对比(Compare) 实现监控表数据步骤(Process) 参考文献(Refere ...