iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >使用java怎么向mysql数据库批量插入数据
  • 315
分享到

使用java怎么向mysql数据库批量插入数据

2023-06-14 22:06:20 315人浏览 八月长安
摘要

今天就跟大家聊聊有关使用java怎么向mysql数据库批量插入数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. An

今天就跟大家聊聊有关使用java怎么向mysql数据库批量插入数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Java可以用来干什么

Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。

JPA单线程执行

代码省略,大概需要39S左右

使用java怎么向mysql数据库批量插入数据

JPA多线程执行

使用java怎么向mysql数据库批量插入数据

大概需要37S左右,并没有想象中的快很多

(免费学习视频分享:java视频教程

原因: 多线程只是大大提高了程序处理数据的时间,并不会提高插入数据库的时间,相反在我这边JPA的框架下,多线程也就意味着多连接,反而更加消耗数据库性能

package com.example.demo.controller;import com.example.demo.entity.Student;import com.example.demo.service.StudentServiceInterface;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.WEB.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.xml.bind.ValidationException;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;@RestController@RequestMapping("/student")public class StudentController {    @Autowired    private StudentServiceInterface studentServiceInterface;    // 来使主线程等待线程池中的线程执行完毕    private CountDownLatch threadsSignal;    // 每个线程处理的数据量    private static final int count = 1000;    // 我的电脑为4核 线程池大小设置为2N+1    private static ExecutorService execPool = Executors.newFixedThreadPool(9);            @GetMapping()    public String saveStudentEnableThread() throws ValidationException {        Long begin = new Date().getTime();        // 需要插入数据库的数据        List<Student> list = new ArrayList<>();        for (int i = 0; i < 10000; i++) {            Student student = new Student();            student.setName("张三");            student.setAge(10);            list.add(student);        }        try {            if (list.size() <= count) {                threadsSignal = new CountDownLatch(1);                execPool.submit(new InsertDate(list));            } else {                List<List<Student>> lists = dealData(list, count);                threadsSignal = new CountDownLatch(lists.size());                for (List<Student> students : lists) {                    execPool.submit(new InsertDate(students));                }            }            threadsSignal.await();        } catch (Exception e) {            System.out.println(e.toString() + " 错误所在行数:" + e.getStackTrace()[0].getLineNumber());        }        // 结束时间        Long end = new Date().getTime();        return "10000条数据插入花费时间 : " + (end - begin) / 1000 + " s";    }        public static List<List<Student>> dealData(List<Student> target, int size) {        List<List<Student>> threadList = new ArrayList<List<Student>>();        // 获取被拆分的数组个数        int arrSize = target.size() % size == 0 ? target.size() / size : target.size() / size + 1;        for (int i = 0; i < arrSize; i++) {            List<Student> students = new ArrayList<Student>();            //把指定索引数据放入到list中            for (int j = i * size; j <= size * (i + 1) - 1; j++) {                if (j <= target.size() - 1) {                    students.add(target.get(j));                }            }            threadList.add(students);        }        return threadList;    }        class InsertDate extends Thread {        List<Student> list = new ArrayList<Student>();        public InsertDate(List<Student> students) {            list = students;        }        public void run() {            try {                // 与数据库交互                studentServiceInterface.save(list);                threadsSignal.countDown();            } catch (ValidationException e) {                e.printStackTrace();            }        }    }}

传统JDBC插入

使用java怎么向mysql数据库批量插入数据

大概需要8S左右,相较于前两种方式已经快很多了,代码如下:

package com.example.demo.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.xml.bind.ValidationException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.util.Date;@RestController@RequestMapping("/student1")public class StudentController1 {    @GetMapping()    public String saveStudentEnableThread() throws ValidationException {        // 开始时间        Long begin = new Date().getTime();        Connection connection = null;        try {            connection = DriverManager.getConnection("jdbc:Mysql://localhost:3306/db01?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true", "admin", "123456");//获取连接            if (connection != null) {                System.out.println("获取连接成功");            } else {                System.out.println("获取连接失败");            }            //这里必须设置为false,我们手动批量提交            connection.setAutoCommit(false);            //这里需要注意,SQL语句的格式必须是预处理的这种,就是values(?,?,...,?),否则批处理不起作用            PreparedStatement statement = connection.prepareStatement("insert into student(id,`name`,age) values(?,?,?)");            // 塞数据            for (int i = 0; i < 10000; i++) {                statement.setInt(1, i+1);                statement.setString(2, "张三");                statement.setInt(3, 10);                //将要执行的SQL语句先添加进去,不执行                statement.addBatch();            }            // 提交要执行的批处理,防止 JDBC 执行事务处理            statement.executeBatch();            connection.commit();            // 关闭相关连接            statement.close();            connection.close();        } catch (Exception e) {            e.printStackTrace();        }        // 结束时间        Long end = new Date().getTime();        // 耗时        System.out.println("10000条数据插入花费时间 : " + (end - begin) / 1000 + " s");        return "10000条数据插入花费时间 : " + (end - begin) / 1000 + " s";    }}

最后检查一下数据是否成功存库,一共30000条,没有丢数据

使用java怎么向mysql数据库批量插入数据

看完上述内容,你们对使用java怎么向mysql数据库批量插入数据有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 使用java怎么向mysql数据库批量插入数据

本文链接: https://www.lsjlt.com/news/275677.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用java怎么向mysql数据库批量插入数据
    今天就跟大家聊聊有关使用java怎么向mysql数据库批量插入数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. An...
    99+
    2023-06-14
  • 【mysql】向mysql数据库批量插入数据(循环)
    错误插入  delimiter $$ //以delimiter来标记用$表示存储过程结束 create procedure pre() //创建pre()存储方法 begin declare i int; //定义i变量 s...
    99+
    2021-08-13
    【mysql】向mysql数据库批量插入数据(循环)
  • 数据库中怎么批量插入数据
    本文小编为大家详细介绍“数据库中怎么批量插入数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“数据库中怎么批量插入数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。批量插入批量插入使用 execute...
    99+
    2023-06-08
  • python向mySQL批量插入数据的方
    通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理。 今天用这个函数完成了批量插入 例程: def test_insertDB():     conn = database.Connect...
    99+
    2023-01-31
    批量 数据 python
  • Java实现百万级数据量向MySQL批量插入
    业务背景: 大数据向mysql表同步百万级数量,我们需要将大数据表里同步过来的数据分别向三张业务表做数据同步,最终将业务表的数据展示给前台进行相关业务操作。 数据量级 大数据表:700w数据量 三张业务表分别需要同步:23w、80w、680...
    99+
    2023-08-25
    mysql java mybatis
  • MySQL中怎么批量插入数据
    本篇文章为大家展示了MySQL中怎么批量插入数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.创建测试表mysql> show create table ...
    99+
    2022-10-18
  • java 批量插入数据
    批量插入数据,常见的使用mybatis foreach 插入的方式,原始的方式和批处理 1,常见的mybatis foreach xml insert into CODEINFO (CODE_TYPE, CODE, MEAN, STAT...
    99+
    2023-09-03
    mybatis mysql 批量插入
  • mysql中怎么使用php批量插入数据
    这篇文章将为大家详细讲解有关mysql中怎么使用php批量插入数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  假如说我有这样一个表,我想往这个表里面插...
    99+
    2022-10-18
  • SpringBootMybatis批量插入Oracle数据库数据
    目录前端数据数据表结构后端Controller:mapperxml前端数据 有如下需求,前端提交一个对象cabinData,保存到数据表中,对象结构如下:  {      "ship...
    99+
    2022-11-13
  • C# MySQL 插入大批量数据
    一、定义DataTable的数据类型 private DataTable GetDataTableFromExternalSource(string tablename) { DataTable dat...
    99+
    2023-09-08
    mysql c# 数据库
  • python批量插入数据到mysql
    使用python批量插入数据到mysql的三种方法 自动化单条insert # -*- coding:utf-8 -*-import timefrom pymysql import *# 装饰器,计算插入50000条数据需要的时间def t...
    99+
    2023-09-06
    mysql 数据库 sql
  • mysql中怎么批量插入规律数据
    mysql中怎么批量插入规律数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Sql代码  insert into CPPRADAR( S...
    99+
    2022-10-18
  • Android批量插入数据到SQLite数据库
      Android中在sqlite插入数据的时候默认一条语句是一个事务,因此如果存在上万条数据插入的话,那需要执行上万次插入操作,操作速度可想而知。因此在Android中插...
    99+
    2022-06-06
    数据 sqlite数据库 SQLite Android
  • java实现批量插入数据
    日常工作或者学习中,可能会遇到批量插入数据的需求,一般情况下数据量少的时候,我们会直接调用批量接口插入数据即可,当数据量特别大时,可能由于数据库限制,插入的数据最多不能超过100条(假如限制100条)...
    99+
    2023-09-03
    java 数据库 oracle
  • 如何批量向表中插入数据?
    我相信对于oracle初学者来说,当遇到领导说将成千上万条的数据插入到表中的时候会很抓狂。当时我是将几十条数据插入到表中,我是insert into一句句插入进去了,执行了几十遍我就已经疯了,后来发现可以批...
    99+
    2022-10-18
  • MySQL怎么快速批量插入1000w条数据
    这篇文章主要介绍MySQL怎么快速批量插入1000w条数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!小编发现插入10000条数据用了0.9s, 插入10w条数据用了4.7s, 插入100w条数据用了58s左右,1...
    99+
    2023-06-14
  • Mysql大数据批量插入方法
    MySQL是当前最流行的关系型数据库之一,大数据批量插入是MySQL中常用的操作之一。在处理大量数据时,如果一条一条地插入会极大地影响效率,因此批量插入是一个更好的选择,可以大大提高数据的处理速度。下面介绍几种MySQL大数据批量插入的方法...
    99+
    2023-09-14
    mysql 大数据 数据库
  • SQL中怎么批量插入数据
    SQL中怎么批量插入数据,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.创建表。2.创建表值参数类型我们打开查询分析器,然后...
    99+
    2022-10-18
  • python数据库批量插入数据的实现(executemany的使用)
    正常情况下往数据库多张表中批量插入1000条数据,若一条一条insert插入,则调用sql语句查询插入需要执行几千次,花费时间长 现使用cursor.executemany(sql,args) ,可对数据进行批量插...
    99+
    2022-06-02
    python数据库批量插入 python 批量插入
  • 大批量数据分批批量插入或更新(Mybatis+MySQL)
    大批量数据分批批量插入或更新 在MySQL数据库的前提下,插入或更新大批量数据。首先批量插入需要考虑到以下几个因素: 数据库一次可以承受多大或者多少条数据的插入批量插入是否会占用Mysql资源太久,影响系统整体使用性能代码中的集合是否会造成...
    99+
    2023-08-30
    mybatis mysql 数据库 java spring boot
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作