Druid连接技术

1.导入jar包

druid-1.0.9.jar
导入数据库驱动jar包

2.定义配置文件
  properties形式
  可以叫任意名称,可以放置在任意目录下。(意味着不能自动加载,需要手动导入)
3.加载配置文件 properties
4.获取数据库连接池对象:通过工厂类来获取
5.获取连接:getConnection

 

配置文件
jar包
文档
源码


基本使用

package cn.itcust.datasource.druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

/**
 * Druid演示
 */
public class DruidDemo1 {
    public static void main(String[] args) throws Exception {
        //1.导如jar包
        //2.定义配置文件

        //3.加载配置文件
//        创建配置文件的对象
        Properties pro = new Properties();
        
      //用getClassLoader().getResourceAsStream直接返回字节输入流
        InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
      
    //用load加载文件,并且还会把属性值装载到集合
        pro.load(is);

        //4.获取连接池对象的信息
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);

        //5.获取数据库连接
        Connection conn = ds.getConnection();

        System.out.println(conn);
    }
}
package cn.itcust.datasource.druid;

import cn.itcust.datasource.utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DruidDemo2 {
    public static void main(String[] args) {
        /**
         * 完成添加操作
         * */
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            //1.获取连接对象
            conn = JDBCUtils.getConnection();
            //2.定义SQL
            String sql = "insert into user values(null,?,?)";
            //3.获取pstmt对象
            pstmt = conn.prepareStatement(sql);
            //给问号赋值
            pstmt.setString(1, "dawang");
            pstmt.setString(2, "789");
            //4.执行SQL
            int count = pstmt.executeUpdate();
            System.out.println(count);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //释放资源
            JDBCUtils.close(pstmt,conn);
        }
    }
}

定义工具类,简化操作

原因:连接池只有需要一个
不定义就会非常麻烦

1.定义一个工具类 JDBCUtils
2.提供静态代码块,加载配置文件,初始化连接池对象 
3.提供方法
1.获取连接方法:通过数据库连接池来获取连接对象
2.释放资源
3.获取连接池的方法(有的工具类、小框架里,只需要连接池不需要连接对象,会自己调用连接池的方法)

package cn.itcust.datasource.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * Druid连接池的工具类
 */
public class JDBCUtils {
    //定义一个成员变量 Datasoutce
    private static DataSource ds;

    //初始化,赋值
    static {
        try {
            //1.加载配置文件,先创建配置文件对象
            Properties pro = new Properties();
            //2.通过load方法加载
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //3.获取连接池
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接的方法
     * 异常抛出去为了能让用户看到,出了问题无法连接
     * */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    /**
     * 释放资源,处理掉,视为了方法更加简单
     * */
    public static void close(Statement stmt, Connection conn){
        if (stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null){
            try {
                conn.close();//归还数据库连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        /**
         * 还有一种简化的操作
         * 两个参数也调用三个参数的方法,第一个不给值就行了
         * */
//   public static void  close(null,stmt,conn);
    }

    /**
     * 重载
     * */
    public static void close(ResultSet rs, Statement stmt, Connection conn){
        if (rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null){
            try {
                conn.close();//归还数据库连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     *获取连接池的方法
     * */
    public static DataSource getDataSource(){
        return ds;
    }
}

猜你喜欢

转载自www.cnblogs.com/rijiyuelei/p/12376909.html