当需要成批插入或者更新记录时。可以采用
Java
的批量
更新
机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单 独提交处理更有效率。
JDBC
的批量处理语句包括下面两个方法:
(1)addBatch(String)
:添加需要批量处理的
SQL
语句或是参数;
(2)executeBatch()
:执行批量处理语句;
(3)clearBatch():
清空缓存的数据
通常我们会遇到两种批量执行
SQL
语句的情况:
(1)多条
SQL
语句的批量处理;
(2)一个
SQL
语句的批量传参;
例如:添加200000条数据到数据库
import java.sql.Connection;
import java.sql.PreparedStatement;
public class jdbcTest {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
try {
long start = System.currentTimeMillis();
conn = JDBCUtils.getConnection(); //JDBCUtils这是自定义的工具类
//设置不允许自动提交数据
conn.setAutoCommit(false);
String sql = "insert into goods(name)values(?)"; //添加到goods表
ps = conn.prepareStatement(sql);
for(int i = 1;i <= 200000;i++){ //添加200000条数据
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);
}
}
}
自定义工具类JDBCUtils
/*
操作数据库的工具类
*/
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
/**
*
* @Description 获取数据库的连接
* @author KG
* @throws Exception
*/
public static Connection getConnection() throws Exception {
// 1.读取配置文件中的4个基本信息
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
// 2.加载驱动
Class.forName(driverClass);
// 3.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
/**
*
* @Description 关闭连接和Statement的操作
* @author KG
*/
public static void closeResource(Connection conn, Statement ps){
try {
if(ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
*
* @Description 关闭资源操作
* @author KG
*/
public static void closeResource(Connection conn, Statement ps, ResultSet rs) {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}