Druid工具介绍

它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。 支持所有JDBC兼容的数据库,包括Oracle、MySQL、Derby、Postgresql、SQL Server、H2等等。 Druid针对oracle和mysql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。简单SQL语句用时10微秒以内,复杂SQL用时30微秒。 通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的

性能上图标分析

这个图标是从别人的blog上面copy过了 ,这个是sql语句进行1000次以后的查询提醒druid 连接池的性能分析,大家可以做为参考,是否准确待定。。

工具的使用

这个是在代码中去注册一些配置信息,不常用的 大家随便看看就好

package com.ruirui.druid;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import org.junit.Test; import com.alibaba.druid.pool.DruidDataSource;
import com.ruirui.decoratedesgin.Utils; public class DruidDemo {
@Test
public void druidTest(){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///stu");
dataSource.setUsername("root");
dataSource.setPassword("123456");
try{
// 获得连接:
conn = dataSource.getConnection();
// 编写SQL:
String sql = "select * from student";
pstmt = conn.prepareStatement(sql);
// 执行sql:
rs = pstmt.executeQuery();
while(rs.next()){
System.out.println(rs.getInt("id")+" "+rs.getString("name"));
}
}catch(Exception e){
e.printStackTrace();
}finally{ Utils.releaseResouce(rs, ps
tmt, conn);
} } }

注册信息在配置文件中

@Test
public void demo2(){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null; try{
Properties properties = new Properties();
properties.load(new FileInputStream("src/druid.properties"));
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
// 获得连接:
conn = dataSource.getConnection();
// 编写SQL:
String sql = "select * from account";
pstmt = conn.prepareStatement(sql);
// 执行sql:
rs = pstmt.executeQuery();
while(rs.next()){
System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(rs, pstmt, conn);
}
}

配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day04
username=root
password=123 这里配置信息有很多 最大连接数量 , 最小连接数量等。。。配置的信息很多啊 大家可以去读一下官方文档。。 跟C3P0使用的情况 基本上都差不多 > 这里是下载地址druid 文档 jar包 http://pan.baidu.com/s/1jHYEPpk

JDBCUtils工具类的使用

package com.ruirui.jdbcutils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Map; import javax.sql.DataSource; 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.KeyedHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JDBCUtils {
/**
* QueryRunner:核心执行类
* ResultSetHandler:提供对查询结果封装
* DbUtils :工具类
*/ //c3p0 连接池
public DataSource comboPooledDataSource = new ComboPooledDataSource(); public Connection getConn() throws SQLException{ return comboPooledDataSource.getConnection();
} //插入数据
public void saveData() throws SQLException { QueryRunner queryRunner = new QueryRunner(comboPooledDataSource); String sql = "insert into student values(null,'ruirui',?,?);"; queryRunner.update(sql, "shenyang",27);
} // 修改表 public void fixData() throws SQLException{ QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "update student set name=? where id=?;";
queryRunner.update(sql,"pp", 13);
} // 删除操作
public void demo3() throws SQLException{
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql ="delete from account where id =?";
queryRunner.update(sql, 4);
} // ArrayHandler:将查询到的一条记录封装到数组当中
public void demo1() throws SQLException{
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select * from account where id = ?";
Object[] objs = queryRunner.query(sql, new ArrayHandler(), 1); // ”1“ 代表一条数据
System.out.println(Arrays.toString(objs));
} //ArrayListHandler
//一条查询是ArrayHandler 一个数组
//多条查询 就是将多个数组 存入集合中
public void demo2() throws SQLException {
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select * from student"; List<Object[]> query = queryRunner.query(sql, new ArrayListHandler()); for (Object[] objects : query) { for (Object object : objects) {
System.out.println(object.toString());
}
}
} //查询一条记录 返回的是一个bean对象
public void demo4() throws SQLException {
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select * from student where id = ?";
Man man = queryRunner.query(sql, new BeanHandler<>(Man.class),5);
System.out.println(man.toString());
} //注意返回的是一个标准的javabean对象,所在定义bean对象时候成员变量必须用private定义 //查询一条记录 返回的是一个bean对象
public void demo5() throws SQLException {
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select * from student";
List<Man> query = queryRunner.query(sql, new BeanListHandler<>(Man.class ));
System.out.println(query.toString());
} // MapHandler:封装一条记录到Map中
public void demo6()throws SQLException{
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select * from student where id = ?";
Map<String,Object> map = queryRunner.query(sql, new MapHandler() ,2);
System.out.println(map);
} // MapListHandler: //查询多条 将map集合存入list 集合中
public void demo7()throws SQLException{
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select * from student";
List<Map<String,Object>> list = queryRunner.query(sql, new MapListHandler());
for (Map<String, Object> map : list) {
System.out.println(map);
}
} // ColumnListHandler ,返回的是一个列值的集合
public void demo8()throws SQLException{
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select id from student";
List<Object> list = queryRunner.query(sql, new ColumnListHandler());
for (Object object : list) {
System.out.println(object.toString());
}
} //ScalarHandler:单值查询
public void demo9()throws SQLException{
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select sum(age) from student;";
Long count = (Long)queryRunner.query(sql, new ScalarHandler());
System.out.println(count);
}
@Test
// KeyedHandler:
public void demo10()throws SQLException{
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select * from student";
Map<Object,Map<String,Object>> map= queryRunner.query(sql, new KeyedHandler("name"));
for (Object key : map.keySet()) {
System.out.println(key + " "+map.get(key));
}
} }

JDBUtils 文档以及jar 下载链接

http://pan.baidu.com/s/1c13IXxu

Druid 连接池 JDBCUtils 工具类的使用的更多相关文章

  1. java使用DBCP连接池创建工具类

    1.说明 java中有个扩展包 javax下面有个DataResource的接口  javax.sql.DataResource 该接口定义了连接池的方法规范 而DBCP框架有apache公司开发,他 ...

  2. DataSourceUtils(使用C3P0连接池的工具类)

    一.导入jar包(c3p0-0.9.1.2.jar) 2.添加配置文件(放在src下) 配置文件的名称:c3p0.properties 或者 c3p0-config.xml 放在src之下 c3p0. ...

  3. Java Redis 连接池 Jedis 工具类

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis; import re ...

  4. Druid连接池配置(java无框架)

    连接池是一个对数据库连接进行管理的东西,当一个线程需要用 JDBC 对 数据库操作时,它从池中请求一个连接.当这个线程使用完了这个连接,将它返回到连接池中,这样这就可以被其它想使用它的线程使用,而不是 ...

  5. Druid连接池工具类

    package cn.zmh.PingCe; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSo ...

  6. Java学习笔记42(数据库连接池 druid连接池)

    druid连接池: 是阿里的连接池,druid的稳定性及效率都很高,目前用的比较广,所以建议开发过程中尽量用druid连接池(支持国产最重要) druid连接池也需要配置文件,配置文件必须是prope ...

  7. Druid连接池和springJDbc框架-Java(新手)

    Druid连接池: Druid 由阿里提供 安装步骤: 导包 durid1.0.9 jar包 定义配置文件 properties文件 名字任意位置也任意 加载文件 获得数据库连接池对象 通过Durid ...

  8. JavaWeb基础之JdbcUtils工具类final

    JdbcUtils工具类3.0最终版,添加了事务相关功能和释放链接.最终版本可以直接打成jar包,在后面的基本项目都会使用该工具类 1. JdbcUtils代码 /** * 最终版 * @author ...

  9. 使用MyBatis集成阿里巴巴druid连接池(不使用spring)

    在工作中发现mybatis默认的连接池POOLED,运行时间长了会报莫名其妙的连接失败错误.因此采用阿里巴巴的Druid数据源(码云链接 ,中文文档链接). mybatis更多数据源参考博客链接 . ...

随机推荐

  1. PHP打开空白的解决办法

    先打开错误提示,再查找原因 找到php.ini # 显示错误:On开启,Off关闭 display_errors = On 也可在php文件中加入以下任意一行代码 # 禁用错误报告 error_rep ...

  2. pyqt(一)安装及配置。

    一:简介 PyQt实现了一个Python模块集.它有超过300类,将近6000个函数和方法.它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac. PyQt采用双 ...

  3. python 安装包查看

    pip freeze可以查看已经安装的python软件包和版本 pip list 也可以

  4. 软工作业No.6 甜美女孩第四周

    各成员在Alpha阶段认领的任务 成员 Alpha阶段认领的任务 整个项目预期的任务量 曾祎祺 安排每日任务,每晚总结 16% 邓画月 基础2048+自定义 16% 梁佩诗 负责界面 16% 何颖琪 ...

  5. L1-022 奇偶分家

    给定N个正整数,请统计奇数和偶数各有多少个? 输入格式: 输入第一行给出一个正整N(≤1000):第2行给出N个正整数,以空格分隔. 输出格式: 在一行中先后输出奇数的个数.偶数的个数.中间以1个空格 ...

  6. 深入理解Linux网络技术内幕——内核基础架构和组件初始化

    引导期间的内核选项     Linux允许用户把内核配置选项传给引导记录,再有引导记录传给内核,以便对内核进行调整.     start_kernel中调用两次parse_args,用于引导期间配置用 ...

  7. Java中的容器和注入分析

    为什么会出现容器的注入? 容器:顾名思义,装东西的器物. 至于spring中bean,aop,ioc等一些都只是实现的方式:具体容器哪些值得我们借鉴,我个人觉得是封装的思想.将你一个独立的系统功能放到 ...

  8. 在本地设置 http-proxy 代理 (前后端分离)

    1. 利用package.json 安装nodejs,创建package.json文件:内容如下 "dependencies": { "http-proxy": ...

  9. 新手小白Linux(Centos6.5)部署java web项目(总)

    一.准备 1.linux  centos版本的相关命令操作,千万别找ubuntu的,好多命令都不一样,新手小白我傻傻不知道硬是浪费了一天的时间……(百度百科linux版本了解一下) 2.远程登录: P ...

  10. SVN使用出现的问题及解决方案

    SVN使用出现的问题及解决方案 一.问题描述: 使用TortoiseSVN-1.9.5进行CheckOut时,出现报错信息如下:  Unable to connect to a repository ...