Druid 连接池 JDBCUtils 工具类的使用
生活随笔
收集整理的這篇文章主要介紹了
Druid 连接池 JDBCUtils 工具类的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 {@Testpublic 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);}}}注冊信息在配置文件中
@Testpublic 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/1jHYEPpkJDBCUtils工具類的使用
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 工具类的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CTO关注:升级Win 10,除了更安全
- 下一篇: 转化ico标志