数据库连接池:Durid(执行流程、工具类)

1、Druid的使用

(1)概念

由阿里巴巴提供

(2)新建一个web项目

(3)导入Druid的jar包

(4)定义配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/student
username=root
password=root
#初始化连接数量
initialSize=3
#最大连接数量
maxActive=5
#最大等待时间
maxWait=3000
  • 必须是properties文件
  • 可以放在任意目录下
  • 文件名任意

(5)加载配置文件,从数据库连接池工厂(DruidDataSourceFactory)中获取数据库连接池对象,然后获取连接对象

(6)测试

需要先导入jar包:

 

 获取数据库连接,要和数据库的版本匹配,否则会连接数据库失败

 

 导入Dbutils的jar包

代码如下:

public class DruidTest {
    public static void main(String[] args) {
        DataSource dataSource = null;
        Properties properties=new Properties();//获取DruidTest字节码对象,然后获取类加载器,加载Druid的配置文件
        InputStream iStream = DruidTest.class.getClassLoader().getResourceAsStream("druid.properties");
        try {
            properties.load(iStream);
            //解析文件,加载文件的数据
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }

        QueryRunner qr = new QueryRunner(dataSource);//参数为数据源
        try {
            String sql = "select * from t_stu";
            List list = qr.query(sql, new ArrayListHandler());
            for (Object[] objs : list) {
                for (Object obj : objs) {
                    System.out.print(obj + "\t");
                }
                System.out.println();
            }
        } catch (SQLException ex) {
            System.out.println(ex);
            throw new RuntimeException("数据查询失败");
        }
    }
}

测试结果:

1    123    212    2133    213    
2    zhai    nan    20171514    study    
123    zzz    nan    123    lanqiu    
124    zzz    nan    123    rap    
125    zzz    nan    123    chang    
126    zzz    nan    123    tiao

与数据库中的数据一致:

数据库连接池:Durid(执行流程、工具类)_第1张图片

 

 (7)流程分析

数据库连接池:Durid(执行流程、工具类)_第2张图片

  • 通过一个类的class对象可以动态获取该类的对象,调用该类的属性、方法
  • 这个class对象不仅可以获取上述内容,还可以得知是由哪一个类加载器,加载本类生成对象的
  • 获取类加载器后,类加载器可以加载当前项目中的任何资源
  • 获取class对象的方式一共有三种,三种方式获取到的是同一个class对象

 

2、封装为工具类

(1)工具类:

public class DruidUtils {
    //声明数据源对象
    private static DataSource dataSource = null;

    //在静态代码块中完成对数据源的初始化
    static {
        Properties properties = new Properties();
        try {
            //获取到类加载器自带的输入流对象,去读取配置文件
            InputStream iStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            /* FileInputStream fStream = new FileInputStream("src/druid.properties"); */
            properties.load(iStream);
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //获取数据源的方法
    public static DataSource getDataSource() {
        return dataSource;
    }
}

(2)测试:

public class UtilsTest {
    public static void main(String[] args) {
        DataSource dataSource = DruidUtils.getDataSource();
        QueryRunner qr = new QueryRunner(dataSource);//参数为数据源
        try {
            String sql = "select * from t_stu";
            List list = qr.query(sql, new ArrayListHandler());
            for (Object[] objs : list) {
                for (Object obj : objs) {
                    System.out.print(obj + "\t");
                }
                System.out.println();
            }
        } catch (SQLException ex) {
            System.out.println(ex);
            throw new RuntimeException("数据查询失败");
        }
    }
}

测试结果:

1    123    212    2133    213    
2    zhai    nan    20171514    study    
123    zzz    nan    123    lanqiu    
124    zzz    nan    123    rap    
125    zzz    nan    123    chang    
126    zzz    nan    123    tiao    

 

你可能感兴趣的:(数据库连接池:Durid(执行流程、工具类))