package day03;
import java.sql.Statement;
import java.sql.Connection;
import day01.DBUtil;
/**
* 批量执行SQL语句
* 批操作可以一次性向数据库服务端发送若干SQL语句,
* 从而减少与数据库服务端的网络通讯,提高执行效率。
* 事务越多速度越慢,网络调用次数越多,越慢,使用statement,生成若干个执行计划,速度越慢
*
* @author Ward
*
*/
public class demo1 {
public static void main(String[] args) {
try {
Connection conn=DBUtil.getConnection();
Statement state=conn.createStatement();
//向userinfo表中插入100条记录
for(int i=0;i<100;i++) {
String sql="INSERT INTO userinfo"
+ " VALUES "
+ " (seq_userinfo_id.NEXTVAL,'test','123456',5000,'test"+i+"@qq.com')";
// state.executeQuery(sql); 立刻将SQL发送至数据库服务端
//添加一个批操作,相当于先缓存在本地
state.addBatch(sql);
}
/**
* 执行批操作,将之前缓存的所有SQL语句
* 一次性发送给数据库服务端
* 这样做可以有效的减少网络调用次数,提高与数据库服务端的通讯效率
*/
state.executeBatch();
state.clearBatch();//清空本地批操作
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.closeConnection();
}
}
}
------------------------------------------------------------------------------------------
package day03;
import java.sql.Connection;
import java.sql.PreparedStatement;
import day01.DBUtil;
/**
* 当大批量执行SQL语句时,影响效率的三个因素:
* 1.事务,事务越多速度越慢
* 2.网络调用,网络调用越多,速度越慢
* 3.statement,PreparedStatement的选用
* 因为执行计划越多效率越慢
* @author Ward
*
*/
public class demo2 {
public static void main(String[] args) {
try {
Connection conn=DBUtil.getConnection();
conn.setAutoCommit(false);
String sql="INSERT INTO userinfo"
+ " VALUES"
+ " (seq_userinfo_id.NEXTVAL,"
+ "?,'123456',5000,?)";
PreparedStatement ps=conn.prepareStatement(sql);
for(int i=0;i<1000;i++) {
ps.setString(1, "test"+i);
ps.setString(2, "test"+i+"@qq.com");
ps.addBatch();
}
ps.executeBatch();
ps.clearBatch();
conn.commit();
System.out.println("执行完毕");
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.closeConnection();
}
}
}