ORACLE JDBC 对千万数据 批量删除和批量插入

文章目录

            • 1. 表结构
            • 2. 批量删除
            • 3. 批量插入
            • 4. 批量删除和插入
            • 5. 实体类
            • 6. main

1. 表结构
-- Create table
create table HERO
(SNO       VARCHAR2(20) not null,USER_NAME VARCHAR2(20),AGE       NUMBER(30)
);comment on table HERO is '英雄信息表';comment on column HERO.SNO is '英雄编码';
comment on column HERO.USER_NAME is '英雄名称';
comment on column HERO.AGE is '英雄年龄';alter table HERO add primary key (SNO);
2. 批量删除
/*** 批量删除** @param heroList 数据即可* @param url      数据库url* @param user     数据库用户名* @param password 数据库密码* @throws SQLException*/public static void batchDel(List<HERO> heroList, String url, String user, String password, String cleansql) throws SQLException {//开始时间long start = System.currentTimeMillis();PreparedStatement clean = null;Connection conn = null;try {//数据连接conn = DriverManager.getConnection(url, user, password);//设置手动提交conn.setAutoCommit(false);//计数器int count = 1;clean = null;// 批量插入时ps对象必须放到for循环外面clean = conn.prepareStatement(cleansql);//把数据集合依次遍历for (HERO hero : heroList) {clean.setString(1, hero.getSNO());clean.addBatch();// 每1000条一批次记录插入一次if (count % 1000 == 0) {clean.executeBatch();conn.commit();clean.clearBatch();}}// 最后一批次剩余数量不足1000clean.executeBatch();conn.commit();} catch (SQLException e) {conn.rollback();e.printStackTrace();} finally {clean.clearBatch();}long end = System.currentTimeMillis();System.out.println(end - start);}
3. 批量插入
/*** 批量插入** @param heroList* @param url* @param user* @param password* @param sql*/public static void batchInsert(List<HERO> heroList, String url, String user, String password, String sql) throws SQLException {Connection conn = null;long begin = 0;long end = 0;try {conn = DriverManager.getConnection(url, user, password);conn.setAutoCommit(false);PreparedStatement pstmt = conn.prepareStatement(sql);for (HERO u : heroList) {pstmt.setString(1, u.getSNO());pstmt.setString(2, u.getUSER_NAME());pstmt.setInt(3, u.getAGE());pstmt.addBatch();}begin = System.currentTimeMillis();pstmt.executeBatch();conn.commit();} catch (SQLException e) {conn.rollback();e.printStackTrace();} finally {end = System.currentTimeMillis();conn.close();}logger.info("使用原生jdbc插入1000万条数据总耗时:{}", end - begin);}
4. 批量删除和插入
 /*** 批量删除和插入** @param heroList 数据即可* @param url      数据库url* @param user     数据库用户名* @param password 数据库密码* @throws SQLException*/public static void batchDelAndInsert(List<HERO> heroList, String url, String user, String password, String cleansql, String sql) throws SQLException {//开始时间long start = System.currentTimeMillis();//数据连接Connection conn = DriverManager.getConnection(url, user, password);//设置手动提交conn.setAutoCommit(false);//计数器int count = 1;PreparedStatement ps = null;PreparedStatement clean = null;// 批量插入时ps对象必须放到for循环外面clean = conn.prepareStatement(cleansql);ps = conn.prepareStatement(sql);//把数据集合依次遍历for (HERO hero : heroList) {clean.setString(1, hero.getSNO());ps.setString(1, hero.getSNO());ps.setString(2, hero.getUSER_NAME());ps.setInt(3, hero.getAGE());clean.addBatch();ps.addBatch();// 每1000条一批次记录插入一次if (count % 1000 == 0) {clean.executeBatch();ps.executeBatch();conn.commit();clean.clearBatch();ps.clearBatch();}}// 最后一批次剩余数量不足1000clean.executeBatch();ps.executeBatch();conn.commit();clean.clearBatch();ps.clearBatch();long end = System.currentTimeMillis();System.out.println(end - start);}
5. 实体类
package com.sinosoft.cmiip.modular.insurance.test;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;@Data
public class HERO {@TableId(value = "SNO")private String SNO;@TableField("USER_NAME")private String USER_NAME;@TableField("AGE")private int AGE;
}
6. main
 public static void main(String[] args) throws SQLException {String url = "jdbc:oracle:thin:@ip地址:1521:lisdb";String user = "dca";String password = "dca";// 模拟1000万个用户List<HERO> heroList = generateHero(1000000);logger.info("生成用户记录总数:{}", heroList.size());// 测试1 批量删除和插入//删除sqlString cleansql = "delete HERO family where SNO = ?";//插入sqlString sql = "insert into HERO(SNO,USER_NAME,AGE) values (?,?,?)";batchDelAndInsert(heroList, url, user, password, cleansql, sql);// 测试2 批量删除batchDel(heroList, url, user, password, cleansql);// 测试3 批量插入batchInsert(heroList, url, user, password, sql);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发函数计算的正确姿势 —— 移植 next.js 服务端渲染框架

首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计算资源&#xff…

SpringBoot xml层SQL update之foreach循环的坑

在做二级分类批量删除置父级目录一级分类num-1时&#xff0c;发现数组里放了一样的pid&#xff0c;但是循环里只默认一个pid 145&#xff0c;所以只成功执行了一次num-1 可以选择在mapper接口层执行循环

Zookeeper UI管理界面安装

文章目录1. 安装java环境2. 安装maven打包环境3. 在线安装Git4. 安装zookeeper服务5. 安装zkui6. 开放防火墙7. 浏览器访问1. 安装java环境 下载 略 环境变量 export JAVA_HOME/app/jdk1.8.0_202 export PATH$PATH:$GOROOT/bin export CLASSPATH.:${JAVA_HOME}/jre/lib/rt.j…

虎牙在全球 DNS 秒级生效上的实践

本文整理自虎牙中间件团队在 Nacos Meetup 的现场分享&#xff0c;阿里巴巴中间件受权发布。 这次分享的是全球 DNS 秒级生效在虎牙的实践&#xff0c;以及由此产生的一些思考&#xff0c;整体上&#xff0c;分为以下5各部分&#xff1a; 背景介绍&#xff1b;方案设计和对比…

MySQL 狠甩 Oracle 稳居 Top1,私有云最受重用,大数据人才匮乏! | 中国大数据应用年度报告...

整理 | 屠敏出品 | CSDN&#xff08;ID:CSDNnews&#xff09;科技长河&#xff0c;顺之者昌&#xff0c;错失者亡。在这个技术百态之中&#xff0c;中国专业的 IT 社区CSDN 创始人&董事长蒋涛曾多次在公开活动中表示&#xff0c;开发者是对技术变革最敏感的人群。这不仅源于…

JS中split对多个分隔符的处理

关于JavaScript split() 方法&#xff0c;菜鸟教程是这样介绍的&#xff1a; split() 方法用于把一个字符串分割成字符串数组。 提示&#xff1a; 如果把空字符串 ("") 用作 separator&#xff0c;那么 stringObject 中的每个字符之间都会被分割。 注意&#xff1…

5分钟了解阿里时序时空数据库

简介 时序时空数据库&#xff08;Time Series & Spatial Temporal Database&#xff0c;简称 TSDB&#xff09;是一种高性能、低成本、稳定可靠的在线时序时空数据库服务&#xff0c;提供高效读写、高压缩比存储、时序数据插值及聚合计算等服务&#xff0c;广泛应用于物联…

分布式6大核心专题_分布式ID

文章目录一、号段模式1. 拉取项目源码编译2. springboot集成Leaf3. 配置leaf.properties4. 创建数据库5. 初始化表结构和数据6. 测试案例7. 浏览器测试美团Leaf的号段模式和雪花算法模式生成分布式全局唯一id方式2种 一、号段模式 目前jar在maven仓库中没有上传 1. 拉取项目源…

现代编程语言大 PK,2020 年开发者关心的七大编程语言!

【CSDN 编者按】“如果我们把人类文明想象成汽车的话&#xff0c;那么软件开发行业就相当于汽车的引擎&#xff0c;编程语言就像引擎的燃料。”作为一名开发者&#xff0c;需跟随技术潮流的发展来学习新技术。2020年&#xff0c;你有计划新学一门编程语言吗&#xff1f;本文作者…

一文读懂深度学习:从神经元到BERT

阿里妹导读&#xff1a;自然语言处理领域的殿堂标志 BERT 并非横空出世&#xff0c;背后有它的发展原理。今天&#xff0c;蚂蚁金服财富对话算法团队整理对比了深度学习模型在自然语言处理领域的发展历程。从简易的神经元到当前最复杂的BERT模型&#xff0c;深入浅出地介绍了深…

启动redis闪退/失败

问题&#xff1a;正常启动redis-server.exe时&#xff0c;项目出现闪退情况 解决方式&#xff1a;按照下图完整流程输出即能正常启动

mysql 8使用美团的Leaf算法(segment)

文章目录1. leaf.properties2. 父工程中的poem文件中修改下连接的版本3. com.sankuai.inf.leaf.server.Constants 加一个字段4. com.sankuai.inf.leaf.server.service.SegmentService 读取该属性5. 重新编译打包1. leaf.properties 修改以下地方 记得加 SERVERTIMEZONE SELEC…

阿里开发者招聘节 | 2019阿里巴巴技术面试题分享:20位专家28道题

为帮助开发者们提升面试技能、有机会入职阿里&#xff0c;云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出&#xff08;面试题官方参考答案将在专辑结束后统一汇总分享&#xff0c;点此进入答题并围观他…

uniapp页面传参使用encodeURIComponent转义特殊符号

答主在uniapp页面跳转传imgUrl&#xff08;地址为&#xff1a;https://metting.oss-cn-beijing.aliyuncs.com/20210615153312771.9AT5NO.jpg?Expires4779415992&OSSAccessKeyIdLTAI4GKXzR3eLCustbbLYxFf&Signature***********&#xff09;时&#xff0c;图片无法正常显…

分布式系统:一致性协议

一致性模型本质上是进程与数据存储的约定&#xff0c;通过一致性模型我们可以理解和推理在分布式系统中数据复制需要考虑的问题和基本假设。那么&#xff0c;一致性模型的具体实现有一些呢&#xff1f;本文会介绍一致性协议实现的主要思想和方法。 什么是一致性协议 一致性协…

论程序员的自我修养——我在阿里干了十年开发

究竟是努力重要&#xff0c;还是选择重要&#xff1f;资深阿里技术人毕玄师兄有着自己的见解。 毕玄&#xff0c;阿里巴巴基础设施事业群负责人&#xff0c;资深技术专家。打造了阿里目前使用最为广泛的核心中间件之一的服务框架&#xff1b;设计并带领团队实现了阿里技术发展…

一文了解 Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控!...

作者 | Richard_Yi责编 | 徐威龙稿源 | 掘金封图| CSDN 下载于视觉中国本文为作者个人经验&#xff0c;供大家参考。去年我们项目做了微服务1.0的架构转型&#xff0c;但是服务监控这块却没有跟上。这不&#xff0c;最近我就被分配了要将我们核心的微服务应用全部监控起来的任务…

分布式6大核心专题_分布式Session

文章目录一、Session存在服务器上还是tomcat中&#xff1f;1. 创建springboot项目2. 启动项目3. 调用登录接口4. 调用获取用户信息接口5. 重启tomcat调用获取用户信息接口二、Session与Cookie的关系三、传统Session3.1. 启动项目3.2. 浏览器测试四、分布式Session解决方案4.1. …

Nacos: Namespace 和 Endpoint 在生产环境下的最佳实践

随着使用 Nacos 的企业越来越多&#xff0c;遇到的最频繁的两个问题就是&#xff1a;如何在我的生产环境正确的来使用 namespace 以及 endpoint。这篇文章主要就是针对这两个问题来聊聊使用 nacos 过程中关于这两个参数配置的最佳实践方式。 namespce 关于 namespace &#x…

java.lang.ArrayIndexOutOfBoundsException:数组下标越界越界

前台vue初始化 pinIds:[]&#xff0c;但是当pinIds前台查询条件传值为空时&#xff0c;pinIds[0]、pinIds[1]取不到值&#xff0c;就会报数组下标越界越界 改为 就可以了