zoukankan      html  css  js  c++  java
  • 数据库连接池 —— Druid的简单使用

    Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。

     

    使用步骤

    一定要导入jar架包。要配置好文件,如果不配置文件,记得在程序中自行添加。

    1. 导入jar包: druid-1.0.9.jar、mysql-connector-java-5.1.48.jar

    2. 定义配置文件:可以命名为druid-1.0.9.properties
      driverClassName=com.mysql.jdbc.Driver
      url=jdbc:mysql://MySQL地址/数据库名
      username=用户名
      password=密码
      initialSize=初始化连接数
      maxActive=最大连接数
      maxWait=最大等待时间(毫秒为单位)
    3. 加载配置文件druid-1.0.9.properties

    4. 获取连接池对象

    5. 获取数据库连接

    举例如下:

    package my.view.datasource.druid;
    
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    
    import javax.sql.DataSource;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.util.Properties;
    
    public class DruidDemo {
    
        public static void main(String[] args) throws Exception {
            // 获取加载配置文件的对象
            Properties properties = new Properties();
    
            // 获取类的类加载器
            ClassLoader classLoader = DruidDemo.class.getClassLoader();
    
            // 获取druid-1.0.9.properties配置文件资源输入流
            InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
    
            // 加载配置文件
            properties.load(resourceAsStream);
    
            // 获取连接池对象
            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
    
            // 获取数据库连接对象
            Connection connection = dataSource.getConnection();
    
            // 打印获取到的数据库连接对象地址值
            System.out.println(connection);
        }
    
    }

    定义一个创建数据库连接池对象的类

    在使用数据库连接池的时候,我们不可能说每次都如上例中的情况自己写一遍吧。我们可以自定义一个工具类,用来创建数据库连接池对象,这个时候,我们乳沟想要创建数据库连接池对象,直接调用该工具类即可。

    创建工具类实例

    定义获取数据库连接池对象的方法

    /**
     * 数据库连接对象
     */
    private static DataSource dataSource;
    
    /*
     获取数据库连接池对象
     */
    static {
    
        try {
            // 获取加载配置文件的对象
            Properties properties = new Properties();
            // 获取类的类加载器
            ClassLoader classLoader = JdbcUtils.class.getClassLoader();
            // 获取druid-1.0.9.properties配置文件资源输入流
            InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
            // 加载配置文件
            properties.load(resourceAsStream);
            // 获取连接池对象
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    }
    
    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource() {
        return dataSource;
    }

    定义获取数据库连接对象的方法

    /**
     * 获取数据库连接对象
     */
    public static Connection getConnection() throws Exception {
        return dataSource.getConnection();
    }

    定义释放资源的方法

    /**
     * 归还连接
     * @param t 要被归还到熟即可连接池对象的数据库连接对象
     * @param <T> 数据库连接对象的类型
     */
    public static <T> void releaseResources (T t){
        if(t != null){
            try {
                // 利用反射,获取class对象
                Class<?> aClass = t.getClass();
                // 获取class对象中的方法对象
                Method close = aClass.getMethod("close");
                // 执行方法
                close.invoke(t);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    该工具类总的代码:

    package my.view.utils;
    
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    
    import javax.sql.DataSource;
    import java.io.InputStream;
    import java.lang.reflect.Method;
    import java.sql.Connection;
    import java.util.Properties;
    
    public class JdbcUtils {
    
        /**
         * 数据库连接对象
         */
        private static DataSource dataSource;
    
        /*
         获取数据库连接池对象
         */
        static {
    
            try {
                // 获取加载配置文件的对象
                Properties properties = new Properties();
                // 获取类的类加载器
                ClassLoader classLoader = JdbcUtils.class.getClassLoader();
                // 获取druid-1.0.9.properties配置文件资源输入流
                InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
                // 加载配置文件
                properties.load(resourceAsStream);
                // 获取连接池对象
                dataSource = DruidDataSourceFactory.createDataSource(properties);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 获取连接池对象
         */
        public static DataSource getDataSource() {
            return dataSource;
        }
    
        /**
         * 获取数据库连接对象
         */
        public static Connection getConnection() throws Exception {
            return dataSource.getConnection();
        }
    
        /**
         * 归还连接
         * @param t 要被归还到熟即可连接池对象的数据库连接对象
         * @param <T> 数据库连接对象的类型
         */
        public static <T> void releaseResources (T t){
            if(t != null){
                try {
                    // 利用反射,获取class对象
                    Class<?> aClass = t.getClass();
                    // 获取class对象中的方法对象
                    Method close = aClass.getMethod("close");
                    // 执行方法
                    close.invoke(t);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
    }

    使用上面创建个工具类实例

    有如下一个数据表格

    CREATE TABLE account (
        id INT PRIMARY KEY AUTO_INCREMENT,   -- id
        NAME VARCHAR(10),                    -- 名字
        balance DOUBLE                       -- 余额
    );
    
    INSERT INTO account (NAME, balance) VALUES ('LeeHua', 1000), ('Tom', 1000);

    向该表格中插入一条数据,实现如下:

    package my.view.datasource.druid;
    
    import my.view.utils.JdbcUtils;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    
    public class JdbcUtilsDemo {
    
        public static void main(String[] args) throws Exception{
    
            // 获取数据库连接池对象
            DataSource dataSource = JdbcUtils.getDataSource();
    
            // 从数据库连接池对象中获取数据库连接对象
            Connection connection = dataSource.getConnection();
    
            // 预定义定义SQL语句
            String sql = "INSERT INTO account (NAME, balance) VALUES (?, ?);";
    
            // 获取执行预定义SQL语句对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
            // 给?赋值
            preparedStatement.setString(1, "WanWu");
            preparedStatement.setInt(2, 2000);
    
            // 执行预编译好的SQL语句
            preparedStatement.executeUpdate();
    
            // 释放资源:PreparedStatement
            JdbcUtils.releaseResources(preparedStatement);
    
            // 归还连接
            JdbcUtils.releaseResources(connection);
    
            // 释放资源:数据库连接池
            JdbcUtils.releaseResources(dataSource);
        }
    
    }

    运行程序,然后查询一下表记录:

    可以看到插入了一条数据,说明测试成功。

              

  • 相关阅读:
    每日问题汇总:2016-3-28
    DataList、Repeater、GridView中的Checkbox取值问题
    长数字字符串逗号分隔
    文字环绕图片效果
    js图片放大镜 可动态更换图片
    动态页面生成静态页
    SQL按汉语拼音首字母排序
    JS软键盘代码
    JS判断RadioButtonList是否有选中项
    简单获取两个时间的时间差函数
  • 原文地址:https://www.cnblogs.com/liyihua/p/12329228.html
Copyright © 2011-2022 走看看