第一部分:今日技术操作及其概述
注意:1.配置文件,如.properties 和今天的c3p0-config.xml在src下
2.如果是jar包,在项目下创建一个文件夹,复制在文件夹中
3.在用提供的第三方配置文件时,列如成c3p0-config.xml时,要记得点击c3p0-config.xml,把里面的数据库名称和密码改成自己的
4.增删改查构造方法的上面必须要加上@Test
1.事务的概念
*事务指的是逻辑上的一组操作,组成这组操作各个逻辑单元要么全都成功,要么全都失败。
2.事务管理API
*开启事务 conn.setAutoCommit(false); 【是否自动提交,为false】
*提交事务 conn.commit(); 【自动提交为false,我们手动提交】
*回滚事务 try { 【如果发生异常用回滚,在回滚中如果发生异常就try catch】
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
3.什么是连接池
*连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用
*补充: 连接池是装有连接的容器,使用连接的话,可以从连接池中进行获取,使用完成之后将连接归还给连接池。
4.为什么要学习连接池
*连接对象创建和销毁是需要耗费时间的,在服务器初始化的时候就初始化一些连接。把这些连接放入到内存中,
使用的时候可以从内存中获取,使用完成之后将连接放入连接池中。从内存中获取和归还的效率要远远高于创建和销毁的效率。(提升性能)。
5.Druid开源连接池的概述
*Druid是阿里旗下开源连接池产品,使用非常简单,可以与Spring框架进行快速整合。
在配置文件中可以写:
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
6.C3P0开源连接池的概述
*C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它们的开源项目有Hibernate,Spring等
7.什么是DBUtils
*Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,
同时也不会影响程序的性能
8.为什么要学习DBUtils
*因为JDBC手写比较麻烦,而且有非常多的代码是类似的。比如获得连接,预编译SQL,释放资源等..那么可以将这些代码抽取出来放到工具类中。
将类似的代码进行抽取。大大简化JDBC的编程。
9.DBUtils的API概述
*QueryRunner对象 核心运行类
第二部分:代码实现==========
1.在转帐的代码中添加事务管理
[1]package JDBCaccount;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.junit.Test;
public class account {
@Test
public void demo(){
Connection conn = null;
PreparedStatement pst = null;
try{
//完成数据库的连接
conn = JDBC工具类.get();
//开启事务
conn.setAutoCommit(false); 【是否自动提交,为false】
//获取执行者对象
String sql = "update account set money=money+? where name=?";
pst = conn.prepareStatement(sql);
//给占位符设置参数
//给aaa减1000元
pst.setDouble(1, -1000);
pst.setString(2, "aaa");
pst.executeUpdate();
int i = 1 / 0; --------------这里会出现异常,出现异常就不会向下执行,如果没有事务管理三步骤,那么账户的钱aaa会减1000,而bbb不会加1000,这是不可以的,
如果此处有异常,就直接执行下面catch语句中回滚,转账就停止,之前被扣的钱就重新还给用户
//给bbb加1000元
pst.setDouble(1, 1000);
pst.setString(2, "bbb");
pst.executeUpdate();
//提交事务
conn.commit(); 【自动提交为false,我们手动提交】
}catch(Exception e){
// 回滚事务: 【如果发生异常用回滚,在回滚中如果发生异常就try catch】
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
JDBC工具类.method(conn, pst);
}
}
}
[2] 配置文件
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/zhanghu?reWriteBacthedStatements=true
username=root
password=0000
2.C3P0开源连接池工具类和其增删改查
[1]C3P0工具类
package C3P0开源连接池练习;
import java