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