美文网首页Java
Druid连接数据库

Druid连接数据库

作者: GG_lyf | 来源:发表于2020-05-15 00:22 被阅读0次

前言

        在使用了c3p0之后感觉还不错,但是用着这东西我却找不到一丝的归属感,当我还在迷茫的时候,就遇见了druid.这个是阿里巴巴的数据库连接池---德鲁伊,听着就高大上,似乎是有点神秘的牙子.不多说了,


开搞

1.最重要的还是导包

druid的jar包

2.编写druid.properties配置文件

url=jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true
#这个可以缺省的,会根据url自动识别
driverClassName=com.mysql.cj.jdbc.Driver
username=用户名
password=密码

##初始连接数,默认0
initialSize=10
#最大连接数,默认8
maxActive=30
#最小闲置数
minIdle=10
#获取连接的最大等待时间,单位毫秒
maxWait=2000
#缓存PreparedStatement,默认false
poolPreparedStatements=true
#缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句设置
maxOpenPreparedStatements=20

3.获取连接

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

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

public class Conn {

    public static Connection getConnection() {
        Connection connection = null;
        try {
            // 数据源配置
            Properties properties = new Properties();
            // 通过当前类的class对象获取资源文件
            InputStream is = Conn.class.getClassLoader().getResourceAsStream("druid.properties");
            System.out.println(is);
            properties.load(is);
            // 返回的是DataSource,不是DruidDataSource
            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
            connection = dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(connection);
        return connection;
    }

    public static DataSource getConnection2() {
        try {
            // 数据源配置
            Properties properties = new Properties();
            // 通过当前类的class对象获取资源文件
            InputStream is = Conn.class.getClassLoader().getResourceAsStream("druid.properties");
            System.out.println(is);
            properties.load(is);
            // 返回的是DataSource,不是DruidDataSource
            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
            return dataSource;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

4.和dbutils配合使用最爽了

/*获取连接*/
import java.sql.Connection;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import org.vector.domain.Student;

public class DruildTest {
    private Connection conn = Conn.getConnection();
    // 创建语句执行者
    private QueryRunner qr = new QueryRunner(); 

    @Test
    public void findAll() {
        try {
            // 编写SQL
            String sql = "select * from student";
            // 设置参数
            List<Student> query = qr.query(conn, sql, new BeanListHandler<Student>(Student.class));// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Student student : query) {
                System.out.println(student);
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void findColumnListHandler() {
        try {
            // 编写SQL
            String sql = "select * from student";
            // 设置参数
            List<String> query = qr.query(conn, sql, new ColumnListHandler<String>("sname"));// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (String string : query) {
                System.out.println(string);
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findArrayListHandler() {
        try {
            String sql = "select * from student";
            // 设置参数
            List<Object[]> query = qr.query(conn, sql, new ArrayListHandler());// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Object[] string : query) {
                System.out.println(string.toString());
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findArrayHandler() {
        try {
            // 编写SQL
            String sql = "select * from student where sid = ?";
            // 设置参数
            Object[] query = qr.query(conn, sql, new ArrayHandler(), 6);// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Object string : query) {
                System.out.println(string.toString());
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findCount() {
        try {
            // 编写SQL
            String sql = "select count(*) from student";
            // 设置参数
            Long query = qr.query(conn, sql, new ScalarHandler<Long>());// 查询所有就要封装进BeanListHandler
            // 执行SQL
            System.out.println(query);
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findMapListHanlder() {
        try {
            // 编写SQL
            String sql = "select * from student";
            // 设置参数
            List<Map<String, Object>> query = qr.query(conn, sql, new MapListHandler());// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Map<String, Object> map : query) {
                for (Object object : map.keySet()) {
                    System.out.println(map.get(object));
                }
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findMapHanlder() {
        try {
            // 编写SQL
            String sql = "select * from student where sid = ?";
            // 设置参数
            Map<String, Object> query = qr.query(conn, sql, new MapHandler(), 6);// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Object object : query.keySet()) {
                System.out.println(query.get(object));
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void findOne() {
        try {
            // 编写SQL
            String sql = "select * from student where sid = ? ";
            // 设置参数
            Student query = qr.query(conn, sql, new BeanHandler<Student>(Student.class), 4);// 查询所有就要封装进BeanListHandler
            // 执行SQL
            System.out.println(query);
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void insert() {
        try {
            // 编写SQL
            String sql = "insert into student (sname,sex,classes) values (?,?,?)";
            // 设置参数
            String sname = "sname";
            String sex = "1";
            int classes = 12346;
            // 执行SQL
            int update = qr.update(conn, sql, sname, sex, classes);
            // 处理结果
            System.out.println(update);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void delete() {
        try {
            // 编写SQL
            String sql = "delete from  student where sname = ?";
            // 设置参数
            String sname = "sname";
            // 执行SQL
            int update = qr.update(conn, sql, sname);
            // 处理结果
            System.out.println(update);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void update() {
        try {
            // 编写SQL
            String sql = "update student set sname = ? ,sex = ? , age = ? ,snumber = ? where sid = ?";
            // 设置参数
            int sid = 32;
            String sname = "三生三世";
            String sex = "妖";
            int age = 258;
            int classes = 121;
            String snumber = "15457884";
            // 执行SQL
            int update = qr.update(conn, sql, sname, sex, age, snumber, sid);
            // 处理结果
            System.out.println(update);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

5.另一种

/*获取连接池*/
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import org.vector.domain.Student;

public class DruildTest2 { 
    // 创建语句执行者
    private QueryRunner qr = new QueryRunner(Conn.getConnection2());

    @Test
    public void findAll() {
        try {
            // 编写SQL
            String sql = "select * from student";
            // 设置参数
            List<Student> query = qr.query(sql, new BeanListHandler<Student>(Student.class));// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Student student : query) {
                System.out.println(student);
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void findColumnListHandler() {
        try {
            // 编写SQL
            String sql = "select * from student";
            // 设置参数
            List<String> query = qr.query(sql, new ColumnListHandler<String>("sname"));// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (String string : query) {
                System.out.println(string);
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findArrayListHandler() {
        try {
            String sql = "select * from student";
            // 设置参数
            List<Object[]> query = qr.query(sql, new ArrayListHandler());// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Object[] string : query) {
                System.out.println(string.toString());
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findArrayHandler() {
        try {
            // 编写SQL
            String sql = "select * from student where sid = ?";
            // 设置参数
            Object[] query = qr.query(sql, new ArrayHandler(), 6);// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Object string : query) {
                System.out.println(string.toString());
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findCount() {
        try {
            // 编写SQL
            String sql = "select count(*) from student";
            // 设置参数
            Long query = qr.query(sql, new ScalarHandler<Long>());// 查询所有就要封装进BeanListHandler
            // 执行SQL
            System.out.println(query);
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findMapListHanlder() {
        try {
            // 编写SQL
            String sql = "select * from student";
            // 设置参数
            List<Map<String, Object>> query = qr.query(sql, new MapListHandler());// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Map<String, Object> map : query) {
                for (Object object : map.keySet()) {
                    System.out.println(map.get(object));
                }
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findMapHanlder() {
        try {
            // 编写SQL
            String sql = "select * from student where sid = ?";
            // 设置参数
            Map<String, Object> query = qr.query(sql, new MapHandler(), 6);// 查询所有就要封装进BeanListHandler
            // 执行SQL
            for (Object object : query.keySet()) {
                System.out.println(query.get(object));
            }
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void findOne() {
        try {
            // 编写SQL
            String sql = "select * from student where sid = ? ";
            // 设置参数
            Student query = qr.query(sql, new BeanHandler<Student>(Student.class), 4);// 查询所有就要封装进BeanListHandler
            // 执行SQL
            System.out.println(query);
            // 处理结果
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void insert() {
        try {
            // 编写SQL
            String sql = "insert into student (sname,sex,classes) values (?,?,?)";
            // 设置参数
            String sname = "sname";
            String sex = "1";
            int classes = 12346;
            // 执行SQL
            int update = qr.update(sql, sname, sex, classes);
            // 处理结果
            System.out.println(update);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void delete() {
        try {
            // 编写SQL
            String sql = "delete from  student where sname = ?";
            // 设置参数
            String sname = "sname";
            // 执行SQL
            int update = qr.update(sql, sname);
            // 处理结果
            System.out.println(update);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void update() {
        try {
            // 编写SQL
            String sql = "update student set sname = ? ,sex = ? , age = ? ,snumber = ? where sid = ?";
            // 设置参数
            int sid = 32;
            String sname = "三生三世";
            String sex = "妖";
            int age = 258;
            int classes = 121;
            String snumber = "15457884";
            // 执行SQL
            int update = qr.update(sql, sname, sex, age, snumber, sid);
            // 处理结果
            System.out.println(update);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}



注:用java代码配置连接方式(个人不推荐,比较不好维护,也不直观,未优化)
import java.sql.Connection;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;

public class Conn {

    public static Connection getConnection() {
        Connection connection = null;  
        try {
            // 数据源配置
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(
                    "jdbc:mysql://localhost:3306/students?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true");
            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); // 这个可以缺省的,会根据url自动识别
            dataSource.setUsername("root");
            dataSource.setPassword("123456");
            // 下面都是可选的配置
            dataSource.setInitialSize(10); // 初始连接数,默认0
            dataSource.setMaxActive(30); // 最大连接数,默认8
            dataSource.setMinIdle(10); // 最小闲置数
            dataSource.setMaxWait(2000); // 获取连接的最大等待时间,单位毫秒
            dataSource.setPoolPreparedStatements(true); // 缓存PreparedStatement,默认false
            dataSource.setMaxOpenPreparedStatements(20); // 缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句代码
            // 获取连接
            connection = dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    public static DataSource getConnection2() {
        try {
            // 数据源配置
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(
                    "jdbc:mysql://localhost:3306/students?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true");
            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); // 这个可以缺省的,会根据url自动识别
            dataSource.setUsername("root");
            dataSource.setPassword("123456");
            // 下面都是可选的配置
            dataSource.setInitialSize(10); // 初始连接数,默认0
            dataSource.setMaxActive(30); // 最大连接数,默认8
            dataSource.setMinIdle(10); // 最小闲置数
            dataSource.setMaxWait(2000); // 获取连接的最大等待时间,单位毫秒
            dataSource.setPoolPreparedStatements(true); // 缓存PreparedStatement,默认false
            dataSource.setMaxOpenPreparedStatements(20); // 缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句代码
            // 获取连接
            return dataSource;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

演示的代码

/*和用配置文件的基本一样*/

相关文章

网友评论

    本文标题:Druid连接数据库

    本文链接:https://www.haomeiwen.com/subject/fmafohtx.html