java mysql database to achieve batch insert

/**
	 * 批量插入
	 * 
	 * @param tableName
	 * @param datas
	 * @return
	 */
	public boolean insertBatch(String tableName, List<Map<String, Object>> datas) {
    
    
		PreparedStatement prepared = null;
		Connection connect = new Mysql().getConnection();
		try {
    
    
			connect.setAutoCommit(false); // 设置手动提交
			StringBuffer fieldString = new StringBuffer();
			StringBuffer paraNo = new StringBuffer(); // 预处理字段“?”
			List<Object> values = new ArrayList<Object>();
			boolean flag = true;
			for (int i = 0; i < datas.size(); i++) {
    
    
				for (Object element : datas.get(i).keySet()) {
    
    
					if (flag) {
    
    
						fieldString.append("," + element);
						paraNo.append(",?");
					}
					values.add(datas.get(i).get(element));
				}
				flag = false;

				if (prepared == null) {
    
    
					// 所有参数组成的数组
					String queryString = "INSERT INTO " + tableName + " (" + fieldString.toString().substring(1)
							+ ") VALUES (" + paraNo.substring(1) + ")";
					prepared = connect.prepareStatement(queryString);
				}
				// 设置对应参数值
				for (int j = 0; j < datas.get(i).size(); j++) {
    
    
					prepared.setObject(j + 1, values.get(j));
				}
				prepared.addBatch();
				if (i % 10000 == 0) {
    
    
					prepared.executeBatch();
					connect.commit();
				}
				values.clear();
			}
			prepared.executeBatch();
			connect.commit();
			return true;
		} catch (Exception e) {
    
    
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {
    
    
			try {
    
    
				if (connect != null) {
    
    
					connect.close();
				}
				if (prepared != null) {
    
    
					prepared.close();
				}
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}
	}
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;


/**
 * 单数据库模式 单数据库模式 需要扩展多数据库或使用主从数据库 在此处进行扩展指定连接数据库 同时修改数据库配置
 * 
 */
public class Mysql {
    
    
	// 连接数据库的参数
	private static String url = null;
	private static String username = null;
	private static String driver = null;
	private static String passwd = null;

	private static Properties propertie = null;
	private static InputStream configStream = null;
	/**
	 * 加载驱动,只需要一次,用静态代码块 单数据库模式,需要扩展多数据库或使用主从数据库在此处进行扩展
	 */
	static {
    
    
		try {
    
    
			propertie = new Properties();
			configStream = Mysql.class.getClassLoader().getResourceAsStream("mysql.properties");
			propertie.load(configStream);

			url = propertie.getProperty("url");
			driver = propertie.getProperty("driver");
			username = propertie.getProperty("username");
			passwd = propertie.getProperty("password");

			Class.forName(driver);
		} catch (Exception e) {
    
    
			e.printStackTrace();
		} finally {
    
    
			try {
    
    
				configStream.close();
			} catch (IOException e) {
    
    
				e.printStackTrace();
			}
			configStream = null;
		}

	}

	/**
	 * 获取数据库链接
	 * 
	 * @return
	 */
	public Connection getConnection() {
    
    
		Connection con = null;
		try {
    
    
			con = DriverManager.getConnection(url, username, passwd);
		} catch (Exception e) {
    
    
			e.printStackTrace();
		}

		return con;
	}
}

//调用方法

List<Map<String, Object>> datas = new ArrayList<>();
Map<String,Object> user = new HashMap<>();
user.put(字段,对应值);
datas.add(user);
insertBatch(表名, datas);

Guess you like

Origin blog.csdn.net/personal_csdn/article/details/89633357