优势:1.节省传递时间。 2.并发处理。
PreparedStatement:
1) addBatch()将一组参数添加到PreparedStatement对象内部。
2) executeBatch()将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
Statement:
1) addBatch(String sql)方法会在批处理缓存中加入一条sql语句。
2) executeBatch()执行批处理缓存中的所有sql语句。
注意:PreparedStatement中使用批量更新时,要先设置好参数后再使用addBatch()方法加入缓存。批量更新中只能使用更改、删除或插入语句。
1.数据库的事务:
事务的ACID属性
* 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单 位,事务中的操作要么都发生,要么都不发生。?
* 一致性(Consistency) 事务必须使数据库从一个一致性状态变 换到另外一个一致性状态。(数据不被破坏)
* 隔离性(Isolation) 事务的隔离性是指一个事务的执行不能被 其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他 事务是隔离的,并发执行的各个事务之间不能互相干扰。
* 持久性(Durability) 持久性是指一个事务一旦被提交,它对数 据库中数据的改变就是永久性的,接下来的其他操作和数据库故障 不应该对其有任何影响
package com.saas.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
public class TestTransactionDemo01 {
public static String _STR=" PreparedStatement: 1.addBatch() 将一组参数添加到 PreparedStatement对象内部 2.executeBatch() 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。* ";
public static String _URL="jdbc:mysql://127.0.0.1:3306/shopping_thpad_com?useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true";
public static String _LOGIN_NAME="root";
public static String _LOGIN_PASSWORD="123456";
private static Connection connect = null;
private PreparedStatement pstmt=null;
private ResultSet rs = null;
public static Connection getConnection() {
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
try {
connect = DriverManager.getConnection(_URL, _LOGIN_NAME, _LOGIN_PASSWORD);
}
catch(SQLException e) {
e.printStackTrace();
}
return connect;
}
public void execInsert() {
connect = getConnection();
//添加
String insert_sql ="insert into item_spec(item_spec_id,name,remarks) values(?,?,?)";
try {
connect.setAutoCommit(false);//事务开始,默认设置为false,表示不自动提交
Calendar cal = Calendar.getInstance();
pstmt= connect.prepareStatement(insert_sql);
pstmt.setString(1,String.valueOf(cal.getTimeInMillis()));
pstmt.setString(2, _STR);
pstmt.setString(3, "test333333333");
//pstmt.executeUpdate();
pstmt.addBatch();
Calendar cal1 = Calendar.getInstance();
pstmt.setString(1,String.valueOf(cal1.getTimeInMillis()+2));
pstmt.setString(2, "test_zhudansheng");
pstmt.setString(3, "test_zhudansheng_3333333");
pstmt.addBatch();
Calendar cal2 = Calendar.getInstance();
pstmt.setString(1,String.valueOf(cal2.getTimeInMillis()+3));
pstmt.setString(2, "g_test");
pstmt.setString(3, "test_zhudansheng_test");
pstmt.addBatch();
pstmt.executeBatch(); // 执行批量处理语句。
connect.commit();//执行事务
System.out.println("提交事务成功");
connect.setAutoCommit(true);
this.doClose();
}
catch(SQLException e) {
e.printStackTrace();
try {
if(!connect.isClosed()) {
connect.rollback();
System.out.println("提交事务失败");
connect.setAutoCommit(true);
}
}
catch(SQLException ee) {
ee.printStackTrace();
}
}
finally {
// 抛出异常则关闭所有链接
this.doClose();
}
}
public void execStatement() {
connect = getConnection();
String result_sql = "select * from item_spec ";//where item_spec_id=?
try {
pstmt = connect.prepareStatement(result_sql);
//pstmt.setString(1, "1319729859937");
rs = pstmt.executeQuery();
while(rs.next()) {
System.out.println(rs.getString("item_spec_id")+"-----------"+rs.getString("name")+"---------------"+rs.getString("remarks"));
}
}
catch(SQLException e) {
e.printStackTrace();
}
finally {
this.doClose();
}
}
public void execUpdate() {
connect = getConnection();
String update_sql ="update item_spec set name=?,remarks=? where item_spec_id=?";
try {
PreparedStatement pstmt = connect.prepareStatement(update_sql);
pstmt.setString(1, "zhudansheng");
pstmt.setString(2, "remarks ssstaskdflasdjfjasdfkljasdaskfjaafkjas手放开垃圾生大幅就 ");
pstmt.setString(3, "1319125327157");
int i_flag=pstmt.executeUpdate();
System.out.println("更新为:"+i_flag);
}
catch(SQLException e) {
e.printStackTrace();
}
finally{
this.doClose();
}
}
/**
*
*/
public void execDelete() {
connect = getConnection();
String delete_sql ="delete from item_spec where item_spec_id=?";
try {
PreparedStatement pstmt = connect.prepareStatement(delete_sql);
pstmt.setString(1, "1319122161343");
int i_flag=pstmt.executeUpdate();
System.out.println("删除为:"+i_flag);
}
catch(SQLException e) {
e.printStackTrace();
}
finally{
this.doClose();
}
}
public void doClose() {
try {
if(null!=rs) {
rs.close();
rs=null;
}
if(null!=pstmt) {
pstmt.close();
pstmt=null;
}
if(null!=connect) {
connect.close();
connect=null;
}
}
catch(SQLException e) {
e.printStackTrace();
}
}
public static void main(String[]args) {
TestTransactionDemo01 test = new TestTransactionDemo01();
test.getConnection();
test.execInsert();
//test.execStatement();
//test.execUpdate();
//test.execDelete();
test.doClose();
}
}
分享到:
相关推荐
全书分5篇24章,共计603个实例和603个经验技巧。每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...
第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...
第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...
第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...
10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...
10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
在本书中,我们将研究Java用于访问和处理数据的各种技术。本书将向读者介绍如何使用Java开发企业级的分布式应用程序,其中涉及生成、处理、存储、 与检索各种类型的数据与不同的数据库。 本书按照一定的逻辑顺序...
10.1.1 数据库和系统事务 10.1.2 Hibernate应用程序中的事务 10.1.3 使用Java Persistence的事务 10.2 控制并发访问 10.2.1 理解数据库级并发 10.2.2 乐观并发控制 10.2.3 获得额外的隔离...
11.4. JDBC批量操作 11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用...
11.4. JDBC批量操作 11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用...
19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using subselect fetching) 19.1.7. 使用延迟属性抓取(Using lazy...
19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using subselect fetching) 19.1.7. 使用延迟属性抓取(Using lazy...
19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using subselect fetching) 19.1.7. 使用延迟属性抓取(Using lazy...