JDBC批量插入数据的jar包设置+代码
前言
MySQL不支持批量操作,需要设置
一、jdbc.properties
在jdbc.properties文件的url的数据库名字后面加:“?rewriteBatchedStatements=true”二、jar包导入
5.1.7不支持
5.1.37支持
先删除原来的jar包
新建lib文件夹
把jar包放进lib文件夹
三、批量插入代码
代码如下(示例):
public static void Insert3(){
Connection conn = null;
java.sql.PreparedStatement ps = null;
try {
long start = System.currentTimeMillis();
conn = JDBCUtils.getConnection();
// 优化2
// 设置不允许自动提交
conn.setAutoCommit(false);
String sql = "insert into goods(name)values(?)";
ps = conn.prepareStatement(sql);
for (int i = 0; i < 20000; i++) {
ps.setObject(1, "name_" + i);
// 优化1
// 不马上执行
// 攒sql
ps.addBatch();
if(i % 500 == 0){
// 攒够500执行
ps.executeBatch();
// 清空batch
ps.clearBatch();
}
if(i == 19999){
}
}
// 最后统一提交数据
conn.commit();
long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (end - start));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCUtils.closeResource(conn, ps);
}
}
package Connection01;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
// 获取数据库连接
public static Connection getConnection() throws Exception {
// 读取配置文件中的4个基本信息
// 获取类的加载器
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
// 加载is这个文件
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);
// System.out.println(conn);
return conn;
}
// 资源关闭
// 导包的时候导通用的,不要导MySQL的
public static void closeResource(Connection conn, Statement ps) {
// 关闭连接Connection和PreparedStatement
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 方法的重载,为了查找数据,而多关闭一个资源
public static void closeResource(Connection conn, Statement ps,ResultSet rs) {
// 关闭连接Connection和PreparedStatement
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}