一、Druid连接池在程序初始化时,预先创建指定数量的数据库连接对象存储在池中。

当需要连接数据库时,从连接池中取出现有连接;

使用完毕后, 也不会进行关闭,而是放回池中,实现复用,节省资源。

1.1 Druid连接池使用步骤创建 database.properties 配置文件。

引入druid-1.1.5.jar文件。

1.1.1database.properties 配置文件#连接设置

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf

username=root

password=root

#

initialSize=10

#最大连接数量

maxActive=50

#

minldle=5

# 放回池中

connection.close();//调用的是DruidPooledConnection实现类里的close()方法

}

}

}

二、Apache的DbUtils使用Commons DbUtils是Apache组织提供的一个对JDBC逬行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发!同时,不会影响程序的性能。

2.1 DbUtils 简介DbUtils是Java编程中数据库操作实用小工具,小巧、简单、实用对于数据表的查询操作,可以把结果转换为List、Array、Set等集合。便于操作。

对于数据表的DML操作,也变得很简单(只需要写SQL语句)。

2.1.1DbUtils主要包含ResultSetHandler接口:转换类型接口BeanHandler类:实现类,把一条记录转换成对象 (查询单个)

BeanListHandler类:实现类,把多条记录转换成List集合。 (查询所有)

ScalarHandler类:实现类,适合获取一行一列的数据。

QueryRunner: 执行sql语句的类增、删、改:update();

查询:query();

2.2DbUtils的使用步骤导入jar包mysql连接驱动jar包 mysql-connector-java-5.1.28-bin.jar

druid-1.1.5.jar

database.properties配置文件

commons-dbutils-1.6,jar

2.2.1 DbUtils 工具类package com.ziming.chapter1_JDBC.demo05_jdbcfinal.utils;

import com.alibaba.druid.pool.DruidDataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Properties;

public class DbUtils {

//声明连接池对象

private static DruidDataSource ds;

static {

Properties properties = new Properties();

InputStream is = DbUtils.class.getResourceAsStream("/database.properties");

try {

properties.load(is);

//创建连接池

ds = (DruidDataSource)DruidDataSourceFactory.createDataSource(properties);

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

public static Connection getConnection(){

try {

return ds.getConnection();//通过连接池获得 连接对象

} catch (SQLException e) {

e.printStackTrace();

}

return null;

}

public static DataSource getDataSource(){ //获得 DataSource 连接池对象

return ds;

}

}

2.2.2 UserDaoImpl数据访问对象package com.ziming.chapter1_JDBC.demo05_jdbcfinal.entity;

public class User {

private int id;

private String username;

private String password;

private String phone;

public User() {}

public User(int id, String username, String password, String phone) {

this.id = id;

this.username = username;

this.password = password;

this.phone = phone;

}

@Override

public String toString() {

return "user{" +

"id=" + id +

", username='" + username + '\'' +

", password='" + password + '\'' +

", phone='" + phone + '\'' +

'}';

}

public int getId() { return id; }

public void setId(int id) { this.id = id; }

public String getUsername() { return username; }

public void setUsername(String username) { this.username = username; }

public String getPassword() { return password; }

public void setPassword(String password) { this.password = password; }

public String getPhone() { return phone; }

public void setPhone(String phone) { this.phone = phone; }

}

package com.ziming.chapter1_JDBC.demo05_jdbcfinal.dao;

import com.ziming.chapter1_JDBC.demo05_jdbcfinal.entity.User;

import java.util.List;

public interface UserDao {

public int insert(User user);

public int update(User user);

public int delete(int id);

public User select(int id);

public List selectAll();

//查看目前多少条记录(用户数量)

public long selectUserNums();

}

package com.ziming.chapter1_JDBC.demo05_jdbcfinal.dao.impl;

import com.ziming.chapter1_JDBC.demo05_jdbcfinal.dao.UserDao;

import com.ziming.chapter1_JDBC.demo05_jdbcfinal.entity.User;

import com.ziming.chapter1_JDBC.demo05_jdbcfinal.utils.DbUtils;

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.BeanHandler;

import org.apache.commons.dbutils.handlers.BeanListHandler;

import org.apache.commons.dbutils.handlers.ScalarHandler;

import javax.swing.*;

import java.sql.SQLException;

import java.util.List;

public class UserDaoImpl implements UserDao {

private QueryRunner queryRunner = new QueryRunner(DbUtils.getDataSource());

@Override

public int insert(User user) {

String sql = "insert into user(username,password,phone) values (?,?,?);";

try {

return queryRunner.update(sql,user.getUsername(),user.getPassword(),user.getPhone());

} catch (SQLException e) {

e.printStackTrace();

}

return 0;

}

@Override

public int update(User user) {

String sql = "update user set username=?,password=?,phone=? where id=?;";

try {

return queryRunner.update(sql,user.getUsername(),user.getPassword(),user.getPhone(),user.getId());

} catch (SQLException e) {

e.printStackTrace();

}

return 0;

}

@Override

public int delete(int id) {

String sql = "delete from user where id=?;";

try {

return queryRunner.update(sql,id);

} catch (SQLException e) {

e.printStackTrace();

}

return 0;

}

@Override

public User select(int id) {

String sql = "select * from user where id=?;";

try {

User user = queryRunner.query(sql, new BeanHandler(User.class), id);

return user;

} catch (SQLException e) {

e.printStackTrace();

}

return null;

}

@Override

public List selectAll() {

String sql = "select * from user;";

try {

List list = queryRunner.query(sql, new BeanListHandler(User.class));

return list;

} catch (SQLException e) {

e.printStackTrace();

}

return null;

}

@Override

public long selectUserNums() {

String sql = "select count(*) from user";

try {

long count = queryRunner.query(sql, new ScalarHandler<>());

return count;

} catch (SQLException e) {

e.printStackTrace();

}

return 0;

}

}

package com.ziming.chapter1_JDBC.demo05_jdbcfinal.test;

import com.ziming.chapter1_JDBC.demo05_jdbcfinal.dao.UserDao;

import com.ziming.chapter1_JDBC.demo05_jdbcfinal.dao.impl.UserDaoImpl;

import com.ziming.chapter1_JDBC.demo05_jdbcfinal.entity.User;

import java.util.List;

public class TestDbUtils {

public static void main(String[] args) {

UserDao userDao = new UserDaoImpl();

//User user = new User(3,"xiaoli","123456","1234569874");

//int result = userDao.insert(user); //新增

//User user = new User(3,"xiaoli","123","1234569874");

//int result = userDao.update(user); //修改

//int result = userDao.delete(3);//删除

//System.out.println(result);

//查单个

// User user = userDao.select(1);

// System.out.println(user);

//查所有

//List list = userDao.selectAll();

//list.forEach(System.out::println);

long count = userDao.selectUserNums();

System.out.println("一共有:"+count);

}

}

druid连接池mysql5.7_MySQL Druid连接池,Apache的DbUtils使用相关推荐

  1. druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库

    一.连接池 在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的 ...

  2. java 连接池 druid_从零开始学 Java - 数据库连接池的选择 Druid

    我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...

  3. 数据库连接池连接异常com.alibaba.druid.pool.GetConnectionTimeoutException

    数据库连接池连接异常com.alibaba.druid.pool.GetConnectionTimeoutException 参考文章: (1)数据库连接池连接异常com.alibaba.druid. ...

  4. java druid mysql连接池_java使用Druid连接池连接mysql

    1.先在mysql创建需要的数据库和表 use book; create table t_user( `id`intprimary key auto_increment, `username` var ...

  5. 数据层优化-jdbc连接池简述、druid简介

    终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...

  6. 记一次网络波动导致druid连接池无法创建新连接的BUG

    背景 项目使用了阿里druid jdbc连接池.某天环境出现网络波动,持续20分钟后,网络恢复,单服务一直无法连接数据库.重启之后正常运行 druid 版本:1.1.21 项目配置 spring.da ...

  7. druid连接池mysql自动关闭_druid连接池

    近期一直报连接池连接的错误,主要就是那个什么last packet 多少ms以前. 所以就研究了下. druid连接池和mysql的连接关系可以简单理解为下面的案例. 有10个接线员A和远程10个接口 ...

  8. 数据库连接池原理及常用连接池介绍

    一.背景介绍 1.1 什么是连接池 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个. 1.2 为什么要使用连接池 数据库连接是一种关键的有 ...

  9. mysql api 连接池_SpringBoot-整合HikariCP连接池

    HikariCP连接池概述池化思想 池化思想是我们项目开发过程中的一种非常重要的思想,如整数池,字符串池,对象池.连接池.线程池等都是池化思想的一种应用,都是 通过复用对象,以减少因创建和释放对象所带 ...

最新文章

  1. 【数据挖掘】基于密度的聚类方法 - DBSCAN 方法 ( K-Means 方法缺陷 | 基于密度聚类原理及概念 | ε-邻域 | 核心对象 | 直接密度可达 | 密度可达 | 密度连接 )
  2. 渗透工具开发——XSS平台的命令行实现
  3. RabbitMQ 添加用户(入门试炼_第2篇)
  4. 扫地机器人单扫和双扫_小米扫拖机器人体验:再见了,拖把君
  5. sharepoint被阻止的文件类型解释说明
  6. 【C语言】构建一个校园交通查询系统程序。能够规划出任意出发地和目的地之间的最短路径。...
  7. vue NoData
  8. mysql 语句活用增删改
  9. 论各类BI工具的“大数据”特性!
  10. iptables 执行清除命令 iptables -F 要非常小心的
  11. 开源数据库管理系统现在比商业产品更受欢迎
  12. 【方向盘】2020年感悟关键词:科比、裁员、管理层、活着
  13. layui 卡片式列表_当卡片式UI不再流行,列表式UI将是王牌
  14. 计算机一级wps选择题必背知识点,计算机一级《WPS》提高练习题及答案
  15. centos7安装XtraBackup 2.4.4
  16. might和could的区别用法_情态动词could,would,might等的用法区别
  17. 图案设计灵感怎么写_设计的灵感来源
  18. 用python读取身份证信息的功能分析与实现,兼述python调用dll的方法
  19. Python自动化测试笔记
  20. linux 提取文件出错,pacman 错误:无法从 ××××获取文件 'core.db'

热门文章

  1. pat basic 1110 区块反转
  2. MacOs 删除无用虚拟声卡
  3. 飞鸽传书2007 优化的房子原理
  4. 【在线支付】在线支付的方式
  5. 微信支付开发,基于SpringBoot+Vue架构的Java在线支付项目
  6. 罗斯蒙特3051系列CG和GP产品的区别
  7. Kakaotalk被禁,kakao安装包,Kakaotalk下载不了,Kakaotalk国内不能用了怎么解决,怎么下载kakao,kakaotalk下载
  8. R语言计算线性回归的最小二乘估计
  9. 楪祈机器人_饥荒楪祈mod下载 饥荒mod大全
  10. AI技术落地医疗搜索 搜狗明医独家首推“湿疹痱子识别”功能