目录
批量操作注意事项
1、批量处理方式:addBatch(),executeBatch(),clearBatch()
2、mysql 服务器默认是关闭批处理的,我们需要通过一个参数,让 mysql 开启批处理支持
?rewriteBatchedStatements=true 写在配置文件的 url 后面
url=jdbc:mysql://localhost:3306/database?characterEncoding=utf8&useUnicode=true&rewriteBatchedStatements=true
driverClass=com.mysql.cj.jdbc.Driver
3、使用更新的 mysql 驱动:5.1.37,该驱动需与 mysql 的版本对应,本文使用的为 8.0.29
4、以往练习使用的都是 5.1.7 驱动,连接驱动为 com.mysql.jdbc.Driver,8.0.x 版本需改为com.mysql.cj.jdbc.Driver
批量插入代码实现
我们可以现在 MySQL 中创建一个测试用的数据表,这个数据表我放在了 test 数据库下
CREATE TABLE goods(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(`customers`25)
);
接下来看看代码实现
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Properties;
public class InsertTest {
public static void main(String[] args) throws Exception {
//读取文件中的信息
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
//将用户名和密码封装在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");
//加载驱动
Class.forName(driverClass);
//获取连接
Connection conn = DriverManager.getConnection(url, user, password);
//设置不允许自动提交数据
conn.setAutoCommit(false);
//预编译sql语句
String sql ="insert into goods(name)values(?)";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i = 1;i <= 1000000;i++) {
ps.setObject(1, "name_" + i);
//“攒”sql
ps.addBatch();
if(i % 500 == 0) {
//执行batch
ps.executeBatch();
//清空batch
ps.clearBatch();
}
}
//提交数据
conn.commit();
conn.close();
ps.close();
}
}
执行之后可以发现插入成功