JDBC會默認(rèn)開啟事務(wù)
事務(wù)開啟
執(zhí)行sql
關(guān)閉事務(wù)
事務(wù)開啟
執(zhí)行sql
提交事務(wù)
事務(wù)開啟
執(zhí)行sql
提交事務(wù)
。闷尿。塑径。。填具。统舀。。劳景。誉简。。
事務(wù)優(yōu)化
事務(wù)開啟
執(zhí)行sql
執(zhí)行sql
執(zhí)行sql
枢泰。描融。铝噩。衡蚂。
提交事務(wù)
所有sql放在一個事務(wù)里。
jdbc是默認(rèn)開啟事務(wù)管理的骏庸。
1000條sql就需要開啟事務(wù)1000次毛甲,sql完成后,需要提交事務(wù)1000次具被。
獲取數(shù)據(jù)庫連接后
1.關(guān)閉jdbc自動管理事務(wù)
conn.setAutoCommit(false);
2.手動提交事務(wù)
conn.commit();
package batch;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
import util.JDBCUtils;
/**
* 這個類用來完成jdbc的批處理
*/
public class BatchUse2 {
// 方式一
@Test
public void StatementImplement() {
Connection conn = null;
Statement st = null;
try {
// 1注冊驅(qū)動 2獲取數(shù)據(jù)庫連接
conn = JDBCUtils.getConnection();
long start = System.currentTimeMillis();
//關(guān)閉自動提交事務(wù)
conn.setAutoCommit(false);
// 3獲取傳輸器
st = conn.createStatement();
// 4執(zhí)行sql
for (int j = 1; j <= 1000; j++) {
String sql = "insert into dept values(null,'" + j + "')";
//把sql達成批次
st.addBatch(sql);
}
//統(tǒng)一發(fā)送給數(shù)據(jù)庫服務(wù)器
st.executeBatch();
//手動提交事務(wù)
conn.commit();
long end=System.currentTimeMillis();
System.out.println("st"+(end-start));
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtils.close(null, st, conn);
}
}
@Test
public void PreparedStatementImplement(){
Connection conn = null;
PreparedStatement ps = null;
try {
// 1注冊驅(qū)動 2獲取數(shù)據(jù)庫連接
conn = JDBCUtils.getConnection();
long start = System.currentTimeMillis();
conn.setAutoCommit(false);
// 4執(zhí)行sql
String sql = "insert into dept values(null,?)";//?是占位符玻募,這句話是sql骨架
ps=conn.prepareStatement(sql);
for (int j = 1; j <= 1000; j++) {
//把sql達成批次
ps.setString(1, j+"new");
ps.addBatch();
}
//統(tǒng)一發(fā)送給數(shù)據(jù)庫服務(wù)器
ps.executeBatch();
conn.commit();
long end=System.currentTimeMillis();
System.out.println("ps"+(end-start));
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtils.close(null, ps, conn);
}
}
}