JDBC(6)事务处理&批量处理
事务处理就是当执行多个SQL指令,因某个指令有误,则取消执行所有的命令
它的作用是保证各项的完整性和一致性
JDBC的数据操作时
commit():提交事务
rollback():回退事务
绝位于java.sql.Connection接口类中
JDBC中的事务操作时默认提交的
可用setAutoCommit(false)来禁止自动提交
Java API中的JDBC事务是通过Connection对象进行控制的
提供了两种方式:自动提交模式&手动提交模式
默认是自动提交模式
事务处理:
public void updata1(Connection conn,String sql){
Statement statement = null;
try {
conn = getConnection();
statement = (Statement) conn.createStatement();
statement.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcTools.Close(null, statement, null);
}
}
@Test
public void test() {
Connection conn = null; try {
conn = JdbcTools.getConnection();
//开始事物,取消默认提交
conn.setAutoCommit(false);
String sql = "update student set sclass = "
+ "sclass-100 where id = 17";
updata1(conn, sql); int i = 10 / 0;
System.out.println(i); sql = "update student set sclass = "
+ "sclass-100 where id = 18";
updata1(conn, sql); //提交事物
conn.commit();
} catch (Exception e) {
e.printStackTrace();
//如出现异常,回滚事物
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
Close(null, null, conn);
}
分析代码:很明显可以看到,代码中出现int i= 10 / 0;在进行打印,此时出错了
此时不会因为一个错误而导致之前的操作失败,上一个插入语句可以成功执行
以上对事务的简单解读
测试事物的级别:
Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED
Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ
@Test
public void JiBie(){
Connection conn = null; try {
conn = JdbcTools.getConnection();
//开始事物,取消默认提交
conn.setAutoCommit(false);
String sql = "update student set sclass = "
+ "sclass-100 where id = 17";
Level(sql); //提交事物
conn.commit(); } catch (Exception e) {
e.printStackTrace();
}finally{
Close(null, null, conn);
}
} public void Level(String sql){
Connection conn = null;
Statement statement = null; try {
conn = getConnection();
//设置级别
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
statement = (Statement) conn.createStatement();
statement.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
Close(null, statement, conn);
}
}
批量处理:
批量对数据库进行大量的操作
PreparedStatement
@Test
public void testPiLiangPreparedStatement() {
Connection conn = null;
PreparedStatement preparedstatement = null;
String sql = null;
try {
conn = getConnection();
conn.setAutoCommit(false);
sql = "insert into student(sname,sclass) values(?,?)";
preparedstatement = (PreparedStatement) conn.prepareStatement(sql);
// 开始时间
long begin = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
preparedstatement.setString(1, "name" + i);
preparedstatement.setInt(2, 1234 + i);
preparedstatement.executeUpdate(); //对时间进行大度的优化
//积攒
preparedstatement.addBatch();
//当积攒到一定的成都自动进行清空
if(( i + 1) % 300 == 0){
preparedstatement.executeBatch();
preparedstatement.clearBatch();
}
}
//若总条数不再是批量的整数倍,还需要再次进行清理
if(10 % 300 != 0){
preparedstatement.executeBatch();
preparedstatement.clearBatch();
}
// 结束时间
long end = System.currentTimeMillis();
System.out.println(end - begin);
conn.commit();
} catch (Exception e) {
e.printStackTrace();
conn.rollback();
} finally {
Close(null, preparedstatement, conn);
}
}
Statement
// 批量对数据库进行大量的操作
// Statement
@Test
public void testPiLiangStatement() {
Connection conn = null;
Statement statement = null;
String sql = null;
try {
conn =getConnection();
conn.setAutoCommit(false);
statement = (Statement) conn.createStatement();
// 开始时间
long begin = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
sql = "insert into student(sname,sclass) values('" + 123 + " ','" + (i + 1) + "')";
statement.executeUpdate(sql);
}
// 结束时间
long end = System.currentTimeMillis();
System.out.println(end - begin);
conn.commit();
} catch (Exception e) {
e.printStackTrace();
conn.rollback();
} finally {
Close(null, statement, conn);
}
}
两者在插入相同的数据量之后,进行时间的对比
PreparedStatement显然比Statement执行的速度快
JDBC(6)事务处理&批量处理的更多相关文章
- JDBC的事务处理
JDBC的事务处理 事务,也是数据库事务,指的是作为单个逻辑工作单元执行的一系列操作.正常的情况下,操作应该顺利进行,与操作相关的所有数据库信息也成功地更新: 但是,如果在这一系列过程中任何一个环节出 ...
- Spring学习5-Spring整合JDBC及其事务处理(注解方式)
一.整合的步骤 1.步骤一:首先要获得DataSource连接池(推荐使用B方式): 要对数据库执行任何的JDBC操作,需要有一个Connection.在Spring中,Connection对象是 ...
- JDBC 元数据 事务处理
使用 JDBC 驱动程序处理元数据 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型 ...
- JDBC中的批量插入和乱码解决
字符集-乱码问题 用JDBC访问MySql数据库的时候,如果JDBC使用的字符集和MySql使用的字符集不一致,那么会导致乱码发生.解决办法当时是在使用JDBC的时候指定和数据库一样的字符集.我们可以 ...
- JDBC 复习4 批量执行SQL
1使用jdbc进行批量执行SQL在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. package dbe ...
- 【JDBC核心】批量插入
批量插入 批量执行 SQL 语句 当需要成批插入或者更新记录时,可以采用 Java 的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率. JDBC 的批量 ...
- Spring整合JDBC及事务处理
1.Spring整合JDBC DAO是数据访问对象(data access object)的简写.接口是实现松耦合的关键,Spring也鼓励使用接口,但不是强制的. 捕获异常时希望能尝试从异常状态中恢 ...
- JDBC连接MYSQL,批量执行SQL语句或在执行一个SQL语句之前执行一个SQL语句
conn = MysqlJdbcUtils.getConnection(); Statement ps=conn.createStatement(); ps.addBatch("trunca ...
- JDBC的事务处理 JDBC事务处理 JDBC教程
JDBC的事务基本知识 事务的定义:一个事务是由一条或多条对数据库操作的sql语句所组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行后,整个事务才会提交给数据库. 结束事务的操作:com ...
随机推荐
- 告别Flash——那些年我们追过的FusionCharts
随着FusionCharts最终放弃Flash这块蛋糕,不.或者已经不能叫做蛋糕了,现在Flash图表控件就只剩下AnyChart这一个独苗了,到底Flash还能走多远?这是Flash的末路吗? 众说 ...
- axios发送post请求后台接受不到问题
axios发送post请求后台接受不到问题 1.首先这是前端的问题 2.解决方案不唯一,但这招肯定行 <!DOCTYPE html> <html> <head> & ...
- MySQL聚合函数在计算时,不会自动匹配与之相对应的数据
学习mysql过程中遇到了一个困惑,纠结了我半天时间,刚刚又重新复习了一下,终于知道问题所在 以下是一个需求: 取得平均薪水最高的部门的部门编号 代码如下: select deptno, avg(sa ...
- git自动更新网站代码
1.实现过程在linux上安装git服务.创建源版本库.从源版本库克隆得到网站目录,然后利用git中的hooks机制,在git push推送代码到源版本库的时候,触发编写的shell脚本,更新网站目录 ...
- easyui扩展行默认展开 以及 去除滚动条
问题背景: 在做打印页面的时候,要求有详细的默认展开显示. 遇到的问题: 1)在用扩展行的时候,grid的所有行都添加了展开收起的图标,(第二行没有明细)如下 2)默认展示有详细行的时候,内 ...
- GeoServer中WMS、WFS的请求规范(转载)
1.背景 1.1WMS简介 Web地图服务(WMS)利用具有地理空间位置信息的数据制作地图.其中将地图定义为地理数据可视的表现.这个规范定义了三个操作:GetCapabitities返回服务级元数据, ...
- 沙盒 sandbox 简记随笔
沙盒又称沙箱(sandbox),是一种按照 安全策略 限制 程序行为 的 执行环境. “沙盒”技术的实践运用流程是: 1. 让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分运行,“沙盒”会记下 ...
- C# 3.0-c#5.0 变化
最近发现对于C#的使用水平一只停留在3.0的程度 对于4.0 5.0的新特性使用的很少,写一篇文章记录一下增加一下认识. C# 3.5 扩展方法 扩展方法所在的类和扩展方法必须是静态的 并且扩展方法第 ...
- IT装B小技巧
1.编写简单的关机脚本 新建一个文本文档,将代码复制上去,将后缀改成bat,双击运行 @echo off shutdown -s -t 2.语音播报 新建一个文本文档,将代码复制上去,将后缀改成vbs ...
- SQL-SERVER学习(一) 数据表的基本操作
1.创建一个数据库,数据库的名字是UserInfo create database UserInfo; 2.创建一个数据表,数据表的名字是UserInfocreate table UserInfo( ...