alibaba druid 数据库连接池入门介绍

Apache druid

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

快速开始

maven

xml 复制代码
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.2.15</version>
</dependency>

配置

DruidDataSource大部分属性都是参考DBCP的,如果你原来就是使用DBCP,迁移是十分方便的。

xml 复制代码
 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
     <property name="url" value="${jdbc_url}" />
     <property name="username" value="${jdbc_user}" />
     <property name="password" value="${jdbc_password}" />

     <property name="filters" value="stat" />

     <property name="maxActive" value="20" />
     <property name="initialSize" value="1" />
     <property name="maxWait" value="6000" />
     <property name="minIdle" value="1" />

     <property name="timeBetweenEvictionRunsMillis" value="60000" />
     <property name="minEvictableIdleTimeMillis" value="300000" />

     <property name="testWhileIdle" value="true" />
     <property name="testOnBorrow" value="false" />
     <property name="testOnReturn" value="false" />

     <property name="poolPreparedStatements" value="true" />
     <property name="maxOpenPreparedStatements" value="20" />

     <property name="asyncInit" value="true" />
 </bean>

这个是 spring 的配置,其实配置上就是一个 POJO

实战例子

mysql 数据准备

建表语句

sql 复制代码
use test;

CREATE TABLE "users" (
  "id" int(11) NOT NULL,
  "username" varchar(255) NOT NULL,
  "email" varchar(255) NOT NULL,
  PRIMARY KEY ("id")
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

插入数据

sql 复制代码
insert into users (id, username, email) values (1, 'u-1', '[email protected]');
insert into users (id, username, email) values (2, 'u-2', '[email protected]');
insert into users (id, username, email) values (3, 'u-3', '[email protected]');

数据确认:

sql 复制代码
mysql> select * from users;
+----+----------+-------------+
| id | username | email       |
+----+----------+-------------+
|  1 | u-1      | [email protected] |
|  2 | u-2      | [email protected] |
|  3 | u-3      | [email protected] |
+----+----------+-------------+
3 rows in set (0.00 sec)

数据库准备

maven 引入

xml 复制代码
<!-- MySQL JDBC Driver -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version> <!-- 或者最新版本 -->
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.15</version>
</dependency>

入门代码

java 复制代码
package com.github.houbb.calcite.learn.mysql;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * druid 整合 mysql 使用
 * @author 老马啸西风
 */
public class DruidMySQLExample {

    public static void main(String[] args) {
        // 初始化 Druid 数据源
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
        dataSource.setUsername("admin");
        dataSource.setPassword("123456");

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 从连接池获取数据库连接
            conn = dataSource.getConnection();

            // 创建 Statement 对象
            stmt = conn.createStatement();

            // 执行 SQL 查询
            rs = stmt.executeQuery("SELECT * FROM users");

            // 遍历结果集
            while (rs.next()) {
                // 处理每一行数据
                int id = rs.getInt("id");
                String username = rs.getString("username");
                String email = rs.getString("email");
                // 输出到控制台
                System.out.println("ID: " + id + ", username: " + username+ ", email: " + email);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

输出如下:

yaml 复制代码
ID: 1, username: u-1, email: [email protected]
ID: 2, username: u-2, email: [email protected]
ID: 3, username: u-3, email: [email protected]
相关推荐
_一条咸鱼_1 小时前
揭秘 Android TextInputLayout:从源码深度剖析其使用原理
android·java·面试
_一条咸鱼_1 小时前
揭秘!Android VideoView 使用原理大起底
android·java·面试
_一条咸鱼_1 小时前
深度揭秘!Android TextView 使用原理全解析
android·java·面试
_一条咸鱼_1 小时前
深度剖析:Android Canvas 使用原理全揭秘
android·java·面试
_一条咸鱼_1 小时前
深度剖析!Android TextureView 使用原理全揭秘
android·java·面试
_一条咸鱼_1 小时前
揭秘!Android CheckBox 使用原理全解析
android·java·面试
_一条咸鱼_1 小时前
深度揭秘:Android Toolbar 使用原理的源码级剖析
android·java·面试
_一条咸鱼_1 小时前
揭秘 Java ArrayList:从源码深度剖析其使用原理
android·java·面试