一、Java jdbc多线程写数据入库背景:
今天下午在做模拟数据时发现200万条数据写入数据库,时间很长,思考通过使用多线程进行数据批量写入操作。
二、实现代码:
1、数据库工具类
package com.general.data.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
/**
* @description 数据库工具类
* @author 砌墙民工
* @date 2020年1月18日 上午12:56:40
* @version 1.0
*
* 修改信息说明:
* @updateDescription
* @updateAuthor
* @updateDate
*/
public class DataBaseUtils {
private static final String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static final String driver = "oracle.jdbc.driver.OracleDriver";
private static final String userName = "simulation";
private static final String password = "simulation";
/**
* 获取数据库连接
* @return 数据库连接
*/
public static Connection getConnection() {
try {
Class.forName(driver);
return DriverManager.getConnection(url, userName, password);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
/**
* 关闭数据库操作资源
* @param conn 数据库连接
* @param stmt 数据库游标
* @param rs 结果集
*/
public static void closeDataBaseResources(Connection conn, Statement stmt, ResultSet rs) {
if (null != rs) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if (null != stmt) {
try {
stmt.close();
} catch (SQLException e) {