Java Durid进行JDBC连接详解

作者:Vicky_Tang 时间:2022-09-25 02:35:12 

一、Druid简介

Druid是阿里开源的数据库连接池,作为后起之秀,性能比dbcp、c3p0更高,使用也越来越广泛。

当然Druid不仅仅是一个连接池,还有很多其他的功能。

二、Druid的优点

  • 高性能。性能比dbcp、c3p0高很多。

  • 只要是jdbc支持的数据库,druid都支持,对数据库的支持性好。并且Druid针对oracle、mysql做了特别优化。

  • 提供监控功能。可以监控sql语句的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈等信息,来了解连接池、sql语句的工作情况,方便统计、分析SQL的执行性能

三、使用 Durid 进行 JDBC MySQL 的连接

3.1 添加 Druid 的依赖、数据库驱动


<!-- mysql-connector-java -->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.49</version>
</dependency>
<!-- druid -->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.0.27</version>
</dependency>

3.2 创建 JDBC 工具类


package cn.kgc.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.log4j.Logger;
import java.io.File;
import java.io.FileInputStream;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* 【JDBC】业务工具类
*/
public class JDBCReadUtils implements Serializable {
   private static Logger logger = Logger.getLogger(JDBCReadUtils.class);
   /**
    * 实现JDBCHelper的单例化
    */
   private static JDBCReadUtils instance = null;
   private QueryRunner runner = null;
   /**
    * 实现单例的过程中,创建唯一的数据库连接池
    */
   private JDBCReadUtils(String url) {
       Properties properties = new Properties();
       try {
           properties.load(new FileInputStream(new File(url)));
           runner = new QueryRunner(DruidDataSourceFactory.createDataSource(properties));
       } catch (Exception e) {
           logger.error(e.getMessage(), e);
       }
   }
   public JDBCReadUtils() {
   }
   /**
    * 获取单例
    *
    * @return 单例
    */
   public static JDBCReadUtils getInstance(String url) {
       if (instance == null) {
           synchronized (JDBCReadUtils.class) {
               if (instance == null) {
                   instance = new JDBCReadUtils(url);
               }
           }
       }
       return instance;
   }
   /**
    * 查询(返回Array结果)
    */
   private Object[] queryArray(String sql, Object... params) {
       Object[] result = null;
       try {
           result = runner.query(sql, new ArrayHandler(), params);
       } catch (SQLException e) {
           logger.error(e.getMessage());
       }
       return result;
   }
   /**
    * 查询(返回ArrayList结果)
    */
   public List<Object[]> queryArrayList(String sql, Object... params) {
       List<Object[]> result = null;
       try {
           result = runner.query(sql, new ArrayListHandler(), params);
       } catch (SQLException e) {
           logger.error(e.getMessage());
       }
       return result == null ? new ArrayList<>() : result;
   }
   /**
    * 更新(包括UPDATE、INSERT、DELETE,返回受影响的行数)
    */
   public int update(String sql, Object... params) {
       int result = 0;
       try {
           result = runner.update(sql, params);
       } catch (SQLException e) {
           logger.error(e.getMessage());
       }
       return result;
   }
}

3.3 添加配置参数

在 resource 目录中添加 jdbc.properties 文件并添加如下配置


driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://singleNode:3306/spark?useSSL=false&createDatabaseIfNotExist=true&characterEncoding=UTF-8
username=root
password=root

3.4 测试代码


package cn.kgc;
import cn.kgc.utils.JDBCReadUtils;
import java.util.List;
public class Test {
   public static void main(String[] args) {
       List<Object[]> result = JDBCReadUtils.getInstance("C:\\Users\\Administrator\\Desktop\\总部实战课\\spark\\project\\src\\main\\resources\\jdbc.properties")
               .queryArrayList("select * from entity_question_number_accuracy limit 10;");
       for (Object o[] : result) {
           System.out.println(o[0] + "\t" + o[1] + "\t" + o[2] + "\t" + o[3]);
       }
   }
}

来源:https://blog.csdn.net/sweet19920711/article/details/120247206

标签:Java,Durid,JDBC,连接
0
投稿

猜你喜欢

  • Java 多线程同步 锁机制与synchronized深入解析

    2023-12-20 17:55:50
  • System 类 和 Runtime 类的常用用法介绍

    2023-11-21 10:07:55
  • Android jni调试打印char阵列的实例详解

    2022-06-18 14:55:40
  • 详解Elasticsearch如何实现简单的脚本排序

    2022-03-13 13:17:50
  • 详解Java高并发编程之AtomicReference

    2023-12-08 14:29:39
  • C#判断一个矩阵是否为对称矩阵及反称矩阵的方法

    2023-04-04 10:55:23
  • 利用ThreadLocal实现一个上下文管理组件

    2022-04-16 03:42:23
  • 浅谈Java基准性能测试之JMH

    2023-01-25 13:17:40
  • 史上最全Android build.gradle配置详解(小结)

    2023-05-09 00:08:36
  • 关于springboot集成阿里云短信的问题

    2023-08-23 09:46:15
  • mybatis-plus乐观锁实现方式详解

    2022-09-27 16:12:27
  • Android自定义StickinessView粘性滑动效果

    2022-11-22 08:56:20
  • android同时控制EditText输入字符个数和禁止特殊字符输入的方法

    2021-08-01 14:16:46
  • java实现文件压缩成zip的工具类

    2022-09-25 09:13:17
  • C# 7.2中结构体性能问题的解决方案

    2022-08-12 23:04:26
  • Android使用criteria选择合适的地理位置服务实现方法

    2022-09-26 14:24:34
  • java连接zookeeper实现zookeeper教程

    2022-09-19 03:04:35
  • android实现欢迎界面效果

    2021-11-05 14:44:52
  • C#通过指针读取文件的方法

    2023-02-21 03:08:10
  • c#多线程之线程基础

    2022-10-06 20:34:44
  • asp之家 软件编程 m.aspxhome.com