優點:1.節省傳遞時間。 2.併發處理。java
PreparedStatement:c++
1) addBatch()將一組參數添加到PreparedStatement對象內部。sql
2) executeBatch()將一批參數提交給數據庫來執行,若是所有命令執行成功,則返回更新計數組成的數組。數據庫
Statement:c#
1) addBatch(String sql)方法會在批處理緩存中加入一條sql語句。數組
2) executeBatch()執行批處理緩存中的全部sql語句。緩存
注意:PreparedStatement中使用批量更新時,要先設置好參數後再使用addBatch()方法加入緩存。批量更新中只能使用更改、刪除或插入語句。併發
Statement批量處理和事務代碼以下: 對象
package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import com.ambow.day19.jdbc.util.JDBCConAndClo;
/*
*1,首先把Auto commit設置爲false,不讓它自動提交
*2,進行手動提交(commit)
*3,提交完成後回覆現場將Auto commit,還原爲true,
*4,當異常發生執行catch中SQLException時,記得要rollback(回滾);
* */
public class StatementCommitAndRollbackTest {
public static void main(String args[]) {
Connection con = null;
Statement stm = null;
try {
con = JDBCConAndClo.getConnectionBao();
stm = con.createStatement();
con.setAutoCommit(false);
// 若不出現異常,則繼續執行到try語句完,不然跳轉到catch語句中
stm.addBatch("insert into student values(23,'tangbao','高數',100)");
stm.addBatch("insert into student values(24,'王定','c#',98)");
stm.addBatch("insert into student values(25,'王國雲','java',90)");
stm.addBatch("insert into student values(26,'溜出','英語',89)");
stm.addBatch("insert into student values(27,'wqde','java',63)");
/*
* int[] executeBatch() throws
* SQLException將一批命令提交給數據庫來執行,若是所有命令執行成功,則返回更新計數組成的數組。
*/
stm.executeBatch();
System.out.println("插入成功!");
// commit:若成功執行完全部的插入操做,則正常結束
con.commit();
System.out.println("提交成功!");
con.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
try {
//rollback: 若出現異常,對數據庫中全部已完成的操做所有撤銷,則回滾到事務開始狀態
if (!con.isClosed()) {
con.rollback();
System.out.println("提交失敗,回滾!");
con.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
} finally {
JDBCConAndClo.closeStatement(stm);
JDBCConAndClo.closeConnection(con);
}
}
}
}
PreparedStatement批量處理和事務代碼以下:
package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.ambow.day19.jdbc.util.JDBCConAndClo;
/*
* PreparedStatement:
1.addBatch() 將一組參數添加到 PreparedStatement對象內部
2.executeBatch() 將一批參數提交給數據庫來執行,若是所有命令執行成功,則返回更新計數組成的數組。
*
*/
public class PreparedStatementCommitAndRollbackTest {
public static void main(String args[]) {
Connection con = null;
PreparedStatement pstm = null;
try {
// 1. 創建與數據庫的鏈接
con = JDBCConAndClo.getConnectionBao();
// 2. 執行sql語句
// 1).先建立PreparedStatement語句(發送slq請求):
pstm = con.prepareStatement("insert into student values(?,?,?,?)");
con.setAutoCommit(false);//1,首先把Auto commit設置爲false,不讓它自動提交
// 2) 設置sql語句1
pstm.setInt(1, 33);
pstm.setString(2,"wangqin");
pstm.setString(3, "c++");
pstm.setDouble(4, 78.5);
// 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。
pstm.addBatch();
// 2) 設置sql語句2
pstm.setInt(1, 34);
pstm.setString(2,"wuytun");
pstm.setString(3, "c");
pstm.setDouble(4, 77);
// 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。
pstm.addBatch();
// 2) 設置sql語句3
pstm.setInt(1, 31);
pstm.setString(2,"tetet");
pstm.setString(3, "c++");
pstm.setDouble(4, 90);
// 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。
pstm.addBatch();
// 2) 設置sql語句4
pstm.setInt(1, 32);
pstm.setString(2,"liug");
pstm.setString(3, "c");
pstm.setDouble(4, 50);
// 3) 將一組參數添加到此 PreparedStatement 對象的批處理命令中。
pstm.addBatch();
// 4) 將一批參數提交給數據庫來執行,若是所有命令執行成功,則返回更新計數組成的數組。
pstm.executeBatch();
System.out.println("插入成功!");
// 若成功執行完全部的插入操做,則正常結束
con.commit();//2,進行手動提交(commit)
System.out.println("提交成功!");
con.setAutoCommit(true);//3,提交完成後回覆現場將Auto commit,還原爲true,
} catch (SQLException e) {
e.printStackTrace();
try {
// 若出現異常,對數據庫中全部已完成的操做所有撤銷,則回滾到事務開始狀態
if(!con.isClosed()){
con.rollback();//4,當異常發生執行catch中SQLException時,記得要rollback(回滾);
System.out.println("插入失敗,回滾!");
con.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
JDBCConAndClo.closePreparedStatement(pstm);
JDBCConAndClo.closeConnection(con);
}
}
}
<!--EndFragment-->