java 测试用例如下
@SpringBootTest
public class BatchInsertTest {
private static final String DB_URL = "jdbc:oracle:thin:@192.101.xxx.xxx:1521:orcl";
private static final String USER = "xxx";
private static final String PASS = "xxx";
private static final int BATCH_SIZE = 2000;
public static void main(String[] args) {
// String filePath = "C:\\Users\\78643\\Desktop\\batchInsertTest.sql";
String filePath = "C:\\Users\\78643\\UPC_202501270942.sql";
List<String> sqlStatements = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
StringBuilder sqlBuilder = new StringBuilder();
boolean insideInsert = false; // 标记是否正在读取一个INSERT语句
int i = 0; //执行次数
Long a = System.currentTimeMillis();
while ((line = br.readLine()) != null) {
if (line.startsWith("INSERT")){
if (insideInsert){
// 如果已经开始读取一个INSERT语句,但现在遇到了一个新的INSERT关键字,
// 则意味着前一个INSERT语句已经结束(假设没有嵌套INSERT的情况)
sqlStatements.add(sqlBuilder.toString().trim().substring(0,sqlBuilder.length()-1));
sqlBuilder.setLength(0); // 清空StringBuilder以便下一个语句
}
insideInsert = true;
}
sqlBuilder.append(line);
// 当列表大小达到BATCH_SIZE时,我们执行并提交这些语句
if (sqlStatements.size() >= BATCH_SIZE) {
i = i + 1;
System.out.println("执行第"+(i)+"次");
executeBatch(sqlStatements);
sqlStatements.clear(); // 清空列表以便下一批处理
}
}
// 提交最后一个INSERT语句(如果有的话)
if (insideInsert && sqlBuilder.length() > 0) {
sqlStatements.add(sqlBuilder.toString().trim().substring(0,sqlBuilder.length()-1));
}
// 提交最后一批(如果剩余的有)
if (!sqlStatements.isEmpty()) {
executeBatch(sqlStatements);
i = i + 1;
System.out.println("执行第"+(i)+"次");
}
Long b = System.currentTimeMillis();
System.out.println("耗时:"+(b-a)+"ms");
} catch (IOException | SQLException e) {
e.printStackTrace();
}
}
private static void executeBatch(List<String> sqlStatements) throws SQLException {
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS)) {
conn.setAutoCommit(false); // 关闭自动提交
for (String sql : sqlStatements) {
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.executeUpdate();
}
}
conn.commit(); // 提交事务
}
}
}