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 ...
随机推荐
- 分布式事务-Sharding 数据库分库分表
Sharding (转)大型互联网站解决海量数据的常见策略 - - ITeye技术网站 阿里巴巴Cobar架构设计与实践 - 机械机电 - 道客巴巴 阿里分布式数据库服务原理与实践:沈询_文档下载 ...
- HTTP POST上传文件说明及注意事项
这一阵子因为项目需要要对接别家公司的restful接口,其中有一个接口是上传视频文件.接着上网找找资料.后来文件是上传成功了,但上服务器一看,文件没有后缀,我勒个去,这是什么个鬼.接着继续找资料,最终 ...
- webpack的学习感悟
https://github.com/webpack/webpack webpack gethub地址. http://webpack.github.io/ webpack 官网 前言 we ...
- 在 Azure 虚拟机上快速搭建 MongoDB 集群
MongoDB 是目前在 NoSQL 市场上非常受欢迎的一个数据库,本文介绍如何使用 Azure PowerShell 和 Azure CLI 在 Azure 虚拟机上搭建单节点 MongoDB(测试 ...
- SQL执行一次INSERT INTO查询,插入多行记录
那如果我们想插入多行记录呢?可能你会想到多次运行INSERT语句即可,就像下面的php代码示例: INSERT INTO tbl_name (col1,col2) VALUES (,); 那如果我们想 ...
- Flash流媒体服务器软件
所谓流媒体技术,是指将连续的影像和声音信息经过压缩处理后放在网站服务器上,让用户能够一边下载一边观看.收听(即所谓的“在线欣赏”),而不需要等整个压缩文件下载到自己的机器上才可以欣赏的网络传输技术.目 ...
- c语言printf实现同一位置打印输出
控制台同一位置打印输出,例如:进度1%->100%在同一位置显示.刚学习c语言的时候一直想做起来,可惜查询好多资料不行.时隔6年多,空闲之余又想起这个问题,便决定一试,虽然c语言已经几乎忘光了, ...
- Alice's Print Service
Alice's Print Service Time Limit: 2 Seconds Memory Limit: 65536 KB Alice is providing print ser ...
- Light OJ 1422 - Halloween Costumes(区间DP 最少穿几件)
http://www.cnblogs.com/kuangbin/archive/2013/04/29/3051392.html http://www.cnblogs.com/ziyi--caolu/a ...
- Windows安装配置xampp
建议大家直接看原文 1.安装XAMPP 进入https://www.apachefriends.org/zh_cn/index.html页面下载XAMPP 2 3.打开xampp控制版 4.修改apa ...