package java5.blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.junit.Test;
import java3.util.JDBCUtils;
/*
* 使用PreparedStatement实现批量数据的操作
* update、delete本身就具有批量操作的效果
* 所以主要研究如何用PreparedStatement实现更高效的批量插入
*/
public class InsertTest {
//批量插入方式二:使用PreparedStatement
@Test
public void testInsert1() throws Exception{
Connection conn=null;
PreparedStatement ps=null;
try {
long start = System.currentTimeMillis();
conn = JDBCUtils.getConnedtion();
String sql="insert into goods(name)values(?)";
ps = conn.prepareStatement(sql);
for(int i=1;i<=200;i++){
ps.setObject(1, "name_"+i);
ps.execute();
}
long end = System.currentTimeMillis();
System.out.println("花费的时间为:"+(end-start));
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCUtils.closeResource(conn, ps);
}
}
/*
* 批量插入的方式三:
* 1、addBatch()、executeBatch()、clearBatch()
* 2、mysql服务器默认关闭批处理,需要配置参数,让mysql开启批处理的支持
* ?rewriteBatchedStatements=true 写在配置文件的url后面
*
*/
@Test
public void testInsert2() throws Exception{
Connection conn=null;
PreparedStatement ps=null;
try {
long start = System.currentTimeMillis();
conn = JDBCUtils.getConnedtion();
String sql="insert into goods(name)values(?)";
ps = conn.prepareStatement(sql);
for(int i=1;i<=20000;i++){
ps.setObject(1, "name_"+i);
//1.赞sql
ps.addBatch();
if(i%500==0){
//2.执行batch
ps.executeBatch();
//3.清空batch
ps.clearBatch();
}
}
long end = System.currentTimeMillis();
System.out.println("花费的时间为:"+(end-start));
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCUtils.closeResource(conn, ps);
}
}
//批量插入的方式四:设置连接不允许自动提交数据
@Test
public void testInsert3() throws Exception{
Connection conn=null;
PreparedStatement ps=null;
try {
long start = System.currentTimeMillis();
conn = JDBCUtils.getConnedtion();
conn.setAutoCommit(false);
String sql="insert into goods(name)values(?)";
ps = conn.prepareStatement(sql);
for(int i=1;i<=20000;i++){
ps.setObject(1, "name_"+i);
//1.赞sql
ps.addBatch();
if(i%500==0){
//2.执行batch
ps.executeBatch();
//3.清空batch
ps.clearBatch();
}
}
//提交数据
conn.commit();
long end = System.currentTimeMillis();
System.out.println("花费的时间为:"+(end-start));
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCUtils.closeResource(conn, ps);
}
}
}