JDBC连接池以及国产的阿里巴巴Druid技术

Posted java学习每天一个知识点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC连接池以及国产的阿里巴巴Druid技术相关的知识,希望对你有一定的参考价值。

JDBC事务管理

事务定义:一个包含多个步骤的业务操作。如果业务操作被事务管理,要么同时成功,要么同时失败。

操作:1开启事务setAutoCommit(boolean autoCommit)在执行sql之前开启事务,设置参数为false表示不自动提交

       2提交事务commit() 当所有sql都执行完提交事务

       3回滚事务rollback() 在catch中回滚事务

 

使用事务最主要的就是看它在什么时候开启。用什么开启,什么时候回滚,什么时候提交在什么位置提交?

package domain;


import
utils.JDBCUtils;

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

public class
JDBCSomething {

   
public static void main(String[]args) {
    Connection conn =
null;
       
PreparedStatement prepar = null;
        try
{
            conn = JDBCUtils.getConnection()
;
           
conn.setAutoCommit(false);//设置自动提交为false

           
String sql = "update login set password = ? where id = ?";
           
prepar = conn.prepareStatement(sql);
           
//给prepar赋值
           
prepar.setString(1,"777");
           
prepar.setInt(2,1);
           
//执行sql
           
prepar.executeUpdate();

            
//制造异常
           
int i= 2/0;
           
//提交事务
           
conn.commit();


       
} catch(SQLException e) {
            e.printStackTrace()
;
           
//发生异常回滚数据到执行SQL之前
           
try {
                conn.rollback()
;
           
} catch(SQLException e1) {
                e1.printStackTrace()
;
           
}
        }
finally{
            JDBCUtils.close(
null,prepar,conn);
       
}
    }
}

 

最后我们发现在出现异常时候表中的数据并没有发生变化,而我们把异常处理之后表中数据变化了,所以在这里是数据回滚起了作用。

连接池

datesource接口是标准接口 在javax。sql包下

获取数据库连接getConnection()

归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,也就是归还连接

实现:

C3P0数据库连接池技术

Druid数据库连接池技术(由国产阿里巴巴提供)

 

 

C3P0技术:

1.导入jar包(两个)另外数据库驱动的jar包必需要导入

2.定义配置文件(以c3p0.properties命名或者c3p0-config.xml)

       路径:src目录下

<c3p0-config>

 <!--使用默认的配置读取连接池对象 -->
 
<default-config>
  
<!--  连接参数 -->
   
<property name="driverClass">com.mysql.jdbc.Driver</property>
    <property
name="jdbcUrl">jdbc:mysql://localhost:3306/day03</property>
    <property
name="user">root</property>
    <property
name="password">admin</property>
   
   
<!-- 连接池参数 -->
   
<property name="initialPoolSize">5</property>
    <property
name="maxPoolSize">10</property>
    <property
name="checkoutTimeout">3000</property>
  </default-config>

 

3创建连接池对象CombopooledDateSource

4获取连接用getConnection

5使用prepareStatement添加sql语句

6使用executeQuery执行prepareStatement对象

7释放资源,返回连接

      

package c3p0text;


import
com.mchange.v2.c3p0.ComboPooledDataSource;

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

public class
C3p0Demo1 {
   
public static void main(String[]args) throws SQLException {
        ComboPooledDataSource cp =
new ComboPooledDataSource();//数据库连接池
       
Connection conn = cp.getConnection();
       
PreparedStatement ps = conn.prepareStatement("select *fromlogin");
       
ResultSet rs = ps.executeQuery();
        while
(rs.next()){
           
int id =rs.getInt("id");
           
String username = rs.getString("USERNAME");
           
String password = rs.getString("password");
           
System.out.println(id+""+username+""+password);

       
}
        rs.close()
;//释放资源
       
ps.close();//释放资源
       
conn.close();//归还连接
   
}
}

控制台:

                           

 

Druid技术:

1.导入druid的jar包

2.定义配置文件

       扩展名为.properties文件,放在任意目录下,但是建议放在src下因为我们需要自己手动加载,使用类加载器的getResourceAsStream方法从src开始找文件。

3通过工厂类获取连接池对象:DruidDataSourceFactory类

4获取连接getConnection

5这种方法不需要自己使用完再归还连接,因为它自己使用完会自动释放。

package druidtext;


import
com.alibaba.druid.pool.DruidDataSourceFactory;

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

public class
DruidText {
   
public static void main(String[]args) throws Exception {
        Properties pro =
new Properties();
       
InputStream is = DruidText.class.getClassLoader().getResourceAsStream("druid.properties");
       
pro.load(is);
       
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
       
System.out.println(ds);//这里不再赘述,我们只输出连接对象看一下就可以
   
}
}

 

 

SpringJDBC:

       由Spring提供的JDBC简单封装

1.导入jar包

2.JDBCTemplate对象。依赖于数据源DataSource

       JdbcTemplate(DataSourceds)

3调用JdbcTemplate的方法来完成CRUD的操作

              update():执行DML语句。增、删、改语句

              queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value将这条记录封装为一个map集合

       注意:这个方法查询的结果集长度只能是1

4.queryForList():查询结果将结果集封装为list集合

       注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中

       query():查询结果,将结果封装为JavaBean对象

       query的参数:RowMapper

       一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装

              newBeanPropertyRowMapper<类型>(类型.class)

5.queryForObject:查询结果,将结果封装为对象

              一般用于聚合函数的查询


以上是关于JDBC连接池以及国产的阿里巴巴Druid技术的主要内容,如果未能解决你的问题,请参考以下文章

猿创征文|使用SpringBoot整合国产数据库连接池Druid

Spring Boot 2.x基础教程:使用国产数据库连接池Druid

阿里druid连接池,SpringJDBC模块,JDBC自定义工具类,JdbcTemplate

##Druid连接池,目前全球最出名,也是最常用的连接池,阿里出品,好用到极点,你值得拥有

阿里Druid连接池的坑。。

有人熟悉阿里的 druid 的连接池么