优势: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) 持久性是指一个事务一旦被提交,它对数 据库中数据的改变就是永久性的,接下来的其他操作和数据库故障 不应该对其有任何影响
事务的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();
}
}