JDBC创建链接的几种方式以及常用连接池

 Connection的创建方式

private final String driverClass = "com.mysql.jdbc.Driver";
private final String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test";
private final String username = "root";
private final String password = "mysql";

方式一:通过驱动driver类来连接数据库

Driver driver = new Driver();

Properties properties = new Properties();

InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties");

properties.load(inputStream);

Connection connect = driver.connect(jdbcUrl, properties);
System.out.println(connect);

方式二:通过反射Driver,加载Driver里面的静态代码块,实现自动注册Driver,在DriverManager连接数据库

 

通过Class.forName反射会自动执行static代码块。

 

Class.forName(driverClass);
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
System.out.println(connection);

方式三:通过DriverManager,注册Driver,来连接数据库(和class.forName相同)

DriverManager.registerDriver(new Driver());
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
System.out.println(connection);

可以直接一行,可能是ide中自动加载jar包中所有class文件。 

Connection connection = DriverManager.getConnection(url, username, password);

PreparedStatement execute 或者Statement执行插入成功却返回false:

如果第一个结果是 ResultSet 对象(简单理解为查询select语句),则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false

开源数据库连接池

DBCP

需要两个jar包

1.不使用配置文件

 //1. 构建数据源对象
            BasicDataSource dataSource = new BasicDataSource();
            //连的是什么类型的数据库, 访问的是哪个数据库 , 用户名, 密码。。
            //jdbc:mysql://localhost/bank 主协议:子协议 ://本地/数据库
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost/test");
            dataSource.setUsername("root");
            dataSource.setPassword("mysql");
            //2. 得到连接对象
            Connection conn = dataSource.getConnection();
            String sql = "insert into hah values(5 ,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            // parameterIndex the first parameter is 1, the second is 2, ...
            ps.setString(1, "admin");
            int i = ps.executeUpdate();
            System.out.println(i);

DBCP连接池配置常用参数说明 

2.使用配置文件

jdbc.properties

url=jdbc:mysql://localhost/test
username=root
password=mysql
driverClassName=com.mysql.jdbc.Driver
 Connection conn = null;
        PreparedStatement ps = null;
        try {
            BasicDataSourceFactory factory = new BasicDataSourceFactory();
            Properties properties = new Properties();
            InputStream is = new FileInputStream("src//dbcp.properties");
            properties.load(is);
            DataSource dataSource = factory.createDataSource(properties);

            //2. 得到连接对象
            conn = dataSource.getConnection();
            String sql = "insert into hah values(6 , ? )";
            ps = conn.prepareStatement(sql);
            ps.setString(1, "properties");
            ps.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if ((conn != null)) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
        }

C3P0

依赖jar包:

0.9.1及前,一个包

0.9.1之后需要

 mchange-commons是c3p0-0.9.2版本后分离出来的包

 

1.不使用配置文件

Connection conn = null;
        PreparedStatement ps = null;
        try {
            //1. 创建datasource
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            //2. 设置连接数据的信息
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql://localhost/test");
            dataSource.setUser("root");
            dataSource.setPassword("mysql");

            //2. 得到连接对象
            conn = dataSource.getConnection();
            String sql = "insert into hah values(7 , ? )";
            ps = conn.prepareStatement(sql);
            ps.setString(1, "c3p0");
            int i = ps.executeUpdate();
            System.out.println(i);

        } catch (Exception e) {
            e.printStackTrace();
        } 

2.使用配置文件

必须在src目录下新建名为c3p0-config.xml的文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>    <!-- jdbc协议地址 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>             <!-- 驱动 -->
        <property name="user">root</property>                                     <!-- 数据库的用户名  -->
        <property name="password">mysql</property>                                     <!-- 数据库密码 ,若没有密码,该项可省略 -->
    </default-config>
</c3p0-config>

 

try {
            //默认会找 xml 中的 c3p0-config 分支。
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            //2. 得到连接对象
            Connection conn = dataSource.getConnection();
            String sql = "insert into hah values(9 , ? )";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, "test");
            int i = ps.executeUpdate();
            System.out.println(i);
        }  catch (SQLException e) {
            e.printStackTrace();
        }

c3p0数据库连接池配置

c3p0与DBCP区别:

1.dbcp没有自动的去回收空闲连接的功能

2.c3p0有自动回收空闲连接功能

 两者主要是对数据连接的处理不同c3p0提供最大空闲时间,dbcp提供最大连接数。前者是如果连接时间超过最大连接时间,就会断开当前连接。dbcp如果超过最大连接数,就会断开所有连接。

JNDI和JDBC的区别及使用

JNDI数据源配置说明 值得一看

Druid

DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池,不知道速度有没有BoneCP快)。

添加druid的jar包

1.不使用配置文件

  try {
            DruidDataSource dd = new DruidDataSource();
            dd.setDriverClassName("com.mysql.jdbc.Driver");
            dd.setUrl("jdbc:mysql://localhost/test");
            dd.setUsername("root");
            dd.setPassword("mysql");
            Connection conn = dd.getConnection("root", "mysql");
            String sql = "insert into hah values(11, ? )";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, "druid");
            int i = ps.executeUpdate();
            System.out.println(i);
        } catch (SQLException e) {
            e.printStackTrace();
        }

2.使用配置文件 

druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test
username=root
password=mysql
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

 

try {
            Properties pro = new Properties();
            InputStream is = this.getClass().getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);
            //4.获取连接池对象
            DataSource ds = DruidDataSourceFactory.createDataSource(pro);
            //5.获取连接
            Connection conn = ds.getConnection();

            String sql = "insert into hah values(10 , ? )";
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setString(1, "druid");
            int i = preparedStatement.executeUpdate();
            System.out.println(i);
        } catch (Exception e) {
            e.printStackTrace();
        }

推荐阅读 

druid参数配置

class.forName详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值