java向数据库批量插入数据
话不多说,代码附上。
// 配置文件获取数据库信息 @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.driver-class-name}") private String driver; @Value("${spring.datasource.username}") private String user; @Value("${spring.datasource.password}") private String password;
public void batcheInsert(List<Map<String,Object>>listMap, String tableName){ try { String sql = ""; String sqlStr1 = "INSERT INTO "+tableName+" ("; String sqlStr2= ") VALUES ("; String sqlStr3 = ")"; String sqlKey = ""; String sqlValue = ""; for (Object key: listMap.get(0).keySet() ) { sqlKey+= key + ","; sqlValue += "?,"; } sqlKey = sqlKey.substring(0,sqlKey.length() -1); sqlValue = sqlValue.substring(0,sqlValue.length() -1); sql = sqlStr1 + sqlKey + sqlStr2 + sqlValue + sqlStr3; logger.info("拼接的insert into SQL:" + sql); Connection conn = getConnection(); conn.setAutoCommit(false); //构造预处理statement PreparedStatement pst = conn.prepareStatement(sql); int count = 0; int index = 1; for(int i = 1;i <= listMap.size();i++){ for (Object val: listMap.get(i-1).values() ) { pst.setString((index++),nullToNull(val)); } index = 1; pst.addBatch(); //每10000次提交一次 if(i % 10000 == 0){//可以设置不同的大小; ++count; pst.executeBatch(); conn.commit(); pst.clearBatch(); } } // 最后插入不足1w条的数据 pst.executeBatch(); conn.commit(); logger.info("批次提交次数:" + ++count); pst.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } }
public Connection getConnection() {//建立返回值为Connectiong的方法 Connection con = null;//声明Connection对象 try {//加载数据库驱动类 Class.forName(driver); System.out.println("数据库驱动加载成功"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try {//通过访问数据库的URL获取数据库连接对象 con = DriverManager.getConnection(url, user, password); System.out.println("数据库连接成功"); } catch (SQLException e) { e.printStackTrace(); } return con;//按方法要求返回一个Connectiong对象 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义