精华内容
下载资源
问答
  • java代码线程批量插入数据
    千次阅读
    2021-02-12 16:17:50

    package root.report.control.dict;

    import org.apache.ibatis.session.SqlSession;

    import root.report.db.DbFactory;

    import java.sql.Connection;

    import java.sql.PreparedStatement;

    import java.sql.SQLException;

    import java.util.Date;

    import java.util.concurrent.CountDownLatch;

    import java.util.concurrent.ExecutorService;

    import java.util.concurrent.Executors;

    /**

    * @Auther: pccw

    * @Date: 2018/10/29 17:45

    * @Description:

    */

    /*

    往自己本地mysql 当中插入10W条记录

    */

    public class TestTwo {

    public static void main(String args[]) throws SQLException {

    SqlSession sqlSession = DbFactory.Open(DbFactory.FORM);

    // insert(sqlSession);

    insertTwo(sqlSession);

    }

    // 多线程案例 使用fix线程 规定为5个

    public static void insertTwo(SqlSession sqlSession) throws SQLException {

    Connection conn = sqlSession.getConnection();

    // 开始时间

    Long begin = new Date().getTime();

    final StringBuffer suffix = new StringBuffer();

    // sql前缀

    String prefix = "INSERT INTO test_dict (code,name) VALUES ";

    // 设置事务为非自动提交

    conn.setAutoCommit(false);

    // 比起st,pst会更好些

    PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句

    final CountDownLatch count = new CountDownLatch(5); //相当线程执行计时器,await()让线程等待,用countDown()消初始化数量。当数量等于0时线程唤醒

    ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5); //线程池

    synchronized (fixedThreadPool) {

    for (int i = 1; i <= 5; i++) {

    final int index = i;

    if (i == 1) {

    fixedThreadPool.execute(new Runnable() {

    @Override

    public void run() {

    for (int j = 1; j < 10; j++) {

    // 构建SQL后缀

    suffix.append("(" + j + "," + "'0000" + j + "'),");

    }

    count.countDown();

    }

    });

    } else if (i == 2) {

    fixedThreadPool.execute(new Runnable() {

    @Override

    public void run() {

    for (int j = 10; j < 100; j++) {

    // 构建SQL后缀

    suffix.append("(" + j + "," + "'000" + j + "'),");

    }

    count.countDown();

    }

    });

    } else if (i == 3) {

    fixedThreadPool.execute(new Runnable() {

    @Override

    public void run() {

    for (int j = 100; j < 1000; j++) {

    // 构建SQL后缀

    suffix.append("(" + j + "," + "'00" + j + "'),");

    }

    count.countDown();

    }

    });

    } else if (i == 4) {

    fixedThreadPool.execute(new Runnable() {

    @Override

    public void run() {

    for (int j = 1000; j < 10000; j++) {

    // 构建SQL后缀

    suffix.append("(" + j + "," + "'0" + j + "'),");

    }

    count.countDown();

    }

    });

    } else {

    fixedThreadPool.execute(new Runnable() {

    @Override

    public void run() {

    for (int j = 10000; j <= 99999; j++) {

    // 构建SQL后缀

    suffix.append("(" + j + "," + "'" + j + "'),");

    }

    count.countDown();

    }

    });

    }

    }

    }

    try {

    count.await();

    // 构建完整SQL

    String sql = prefix + suffix.substring(0, suffix.length() - 1);

    // 添加执行SQL

    pst.addBatch(sql);

    // 执行操作

    pst.executeBatch();

    // 提交事务

    conn.commit();

    // 头等连接

    pst.close();

    conn.close();

    // 结束时间

    Long end = new Date().getTime();

    System.out.println("10万条数据插入花费时间 : " + (end - begin) + " ms");

    System.out.println("插入完成");

    } catch (InterruptedException e) {

    e.printStackTrace();

    }finally {

    fixedThreadPool.shutdown();

    }

    }

    // 测试使用 fetch 按照指定规格读取数据

    }

    更多相关内容
  • 片文章介绍了一个Java批量添加数据,多个字段同时添加多条数据具体实例,面向的是Oracle数据库,需要的朋友可以参考下
  • 1. 场景 : 往数据库插入10W记录2. 思考方案 : 单纯的我们这里不涉及其他任何操作,我们只是想生成一个10W记录而已,中间无其他步骤,得到的效果如下图所示,而我们又不会mysql脚本啊之类的,那我们不如用java...

    1. 场景 : 往数据库插入10W条记录

    2. 思考方案 : 单纯的我们这里不涉及其他任何操作,我们只是想生成一个10W条记录而已,中间无其他步骤,得到的效果如下图所示,

    而我们又不会mysql脚本啊之类的,那我们不如用java来实现,用jdbc的批次操作来完成 ,博客借鉴自:

    https://blog.csdn.net/summeranhx/article/details/81583575?utm_source=blogxgwz0

    实现的效果图为 :

    47cec665b0744e8d8de2dd5d84cfdd34.png

    3. 代码为 :

    packageroot.report.control.dict;importorg.apache.ibatis.session.SqlSession;importroot.report.db.DbFactory;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.util.Date;/*** @Auther: pccw

    * @Date: 2018/10/29 17:45

    * @Description:*/

    /*往自己本地mysql 当中插入10W条记录*/

    public classTestTwo {public static voidmain(String args[]){

    SqlSession sqlSession=DbFactory.Open(DbFactory.FORM); // 本地mysql数据库

    insert(sqlSession);

    }public static voidinsert(SqlSession sqlSession){

    Connection conn=sqlSession.getConnection();//开始时间

    Long begin = newDate().getTime();//sql前缀

    String prefix = "INSERT INTO test_dict (code,name) VALUES ";try{//保存sql后缀

    StringBuffer suffix = newStringBuffer();//设置事务为非自动提交

    conn.setAutoCommit(false);//比起st,pst会更好些

    PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句//外层循环,总提交事务次数

    for (int i = 1; i <= 5; i++) {

    suffix= newStringBuffer();//第j次提交步长

    if(i == 1) {for (int j = 1; j < 10; j++) {//构建SQL后缀

    suffix.append("(" + j+","+"'0000" +j+"'),");

    }

    }else if(i == 2) {for (int j = 10; j < 100; j++) {//构建SQL后缀

    suffix.append("(" + j+","+"'000" +j+"'),");

    }

    }else if(i == 3) {for (int j = 100; j < 1000; j++) {//构建SQL后缀

    suffix.append("(" + j+","+"'00" +j+"'),");

    }

    }else if(i == 4) {for (int j = 1000; j < 10000; j++) {//构建SQL后缀

    suffix.append("(" + j+","+"'0" +j+"'),");

    }

    }else{for (int j = 10000; j <= 99999; j++) {//构建SQL后缀

    suffix.append("(" + j+","+"'" +j+"'),");

    }

    }//构建完整SQL

    String sql = prefix + suffix.substring(0, suffix.length() - 1);//添加执行SQL

    pst.addBatch(sql);//执行操作

    pst.executeBatch();//提交事务

    conn.commit();//清空上一次添加的数据

    suffix = newStringBuffer();

    }//头等连接

    pst.close();

    conn.close();

    }catch(SQLException e) {

    e.printStackTrace();

    }//结束时间

    Long end = newDate().getTime();//耗时

    System.out.println("10万条数据插入花费时间 : " + (end - begin) / 1000 + " s");

    System.out.println("插入完成");

    }

    }

    不难看出,代码没什么含金量,代码着重在于下面2处操作:

    //添加执行SQL

    pst.addBatch(sql);//执行操作

    pst.executeBatch();

    4. 我们再改写成用多线程的方式试试 :

    改写成多线程 方案则要考虑到使用何种线程池 ? 线程池线程都执行完才能继续执行下一步骤,在此期间怎样感知线程执行完毕 ?

    没错,我们这在这里使用了  newFixedThreadPool  这个线程池,这是直接规划出多少个线程,然后我们怎样让线程执行完毕再执行其他的?

    没错,我们直接使用

    final CountDownLatch count = new CountDownLatch(5);

    CountDownLatch 这个并发包辅助类 -》当我们线程执行完一个任务之后,count.countDown(); -》 同时对于fixedThreadPool 这个变量

    要使用 synchronized 来进行锁定,然后在整个方法之外 对 count 变量进行 await()唤醒操作,继续执行下列步骤。

    好了,废话少说,下面贴出代码 :

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    packageroot.report.control.dict;importorg.apache.ibatis.session.SqlSession;importroot.report.db.DbFactory;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.util.Date;importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/*** @Auther: pccw

    * @Date: 2018/10/29 17:45

    * @Description:*/

    /*往自己本地mysql 当中插入10W条记录*/

    public classTestTwo {public static void main(String args[]) throwsSQLException {

    SqlSession sqlSession=DbFactory.Open(DbFactory.FORM);//insert(sqlSession);

    insertTwo(sqlSession);

    }//多线程案例 使用fix线程 规定为5个

    public static void insertTwo(SqlSession sqlSession) throwsSQLException {

    Connection conn=sqlSession.getConnection();//开始时间

    Long begin = newDate().getTime();final StringBuffer suffix = newStringBuffer();//sql前缀

    String prefix = "INSERT INTO test_dict (code,name) VALUES ";//设置事务为非自动提交

    conn.setAutoCommit(false);//比起st,pst会更好些

    PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句

    final CountDownLatch count = new CountDownLatch(5);

    ExecutorService fixedThreadPool= Executors.newFixedThreadPool(5);synchronized(fixedThreadPool) {for (int i = 1; i <= 5; i++) {final int index =i;if (i == 1) {

    fixedThreadPool.execute(newRunnable() {

    @Overridepublic voidrun() {for (int j = 1; j < 10; j++) {//构建SQL后缀

    suffix.append("(" + j + "," + "'0000" + j + "'),");

    }

    count.countDown();

    }

    });

    }else if (i == 2) {

    fixedThreadPool.execute(newRunnable() {

    @Overridepublic voidrun() {for (int j = 10; j < 100; j++) {//构建SQL后缀

    suffix.append("(" + j + "," + "'000" + j + "'),");

    }

    count.countDown();

    }

    });

    }else if (i == 3) {

    fixedThreadPool.execute(newRunnable() {

    @Overridepublic voidrun() {for (int j = 100; j < 1000; j++) {//构建SQL后缀

    suffix.append("(" + j + "," + "'00" + j + "'),");

    }

    count.countDown();

    }

    });

    }else if (i == 4) {

    fixedThreadPool.execute(newRunnable() {

    @Overridepublic voidrun() {for (int j = 1000; j < 10000; j++) {//构建SQL后缀

    suffix.append("(" + j + "," + "'0" + j + "'),");

    }

    count.countDown();

    }

    });

    }else{

    fixedThreadPool.execute(newRunnable() {

    @Overridepublic voidrun() {for (int j = 10000; j <= 99999; j++) {//构建SQL后缀

    suffix.append("(" + j + "," + "'" + j + "'),");

    }

    count.countDown();

    }

    });

    }

    }

    }try{

    count.await();//构建完整SQL

    String sql = prefix + suffix.substring(0, suffix.length() - 1);//添加执行SQL

    pst.addBatch(sql);//执行操作

    pst.executeBatch();//提交事务

    conn.commit();//头等连接

    pst.close();

    conn.close();//结束时间

    Long end = newDate().getTime();

    System.out.println("10万条数据插入花费时间 : " + (end - begin) + " ms");

    System.out.println("插入完成");

    }catch(InterruptedException e) {

    e.printStackTrace();

    }finally{

    fixedThreadPool.shutdown();

    }

    }//测试使用 fetch 按照指定规格读取数据

    }

    多线程执行批量插入

    那么,其实我的机子是8G内存的,在上面非多线程模式执行代码,花费了4S :

    ca3909ead3f3f2a5be395e146724b314.png

    而我们使用了多线程之后,发现连1S都不到,而且数据库数量也都是对的:

    54d12629e5dc681b141ec97f29338030.png

    展开全文
  • JAVA循环插入大量数据,每次插入N

    千次阅读 2020-09-28 16:20:47
    i += insertNumber) { //作用为insertNumber最后没有800条数据则剩余几条newList中就装几条 if (i + MAX_INSERT_NUMBER > allNumber) { insertNumber = allNumber - i; } List<T> insertList = list.subList(i, i +...

    第一种方法:

    		//需要插入的总数量
            Integer allNumber =3000;
            Integer number = 0;
            //每次循环最多生成数量
            Integer max = 100;
            do {
                if (allNumber > max) {
                    number = max;
                    allNumber -= max;
                } else {
                    number = allNumber;
                    allNumber = 0;
                }
                //todo 执行插入逻辑
                List<T> list = new ArrayList<T>();
                for (int i = 0; i < number; i++) {
                    T t = new T();
                    list.add(t);
                }
                //执行批量插入sql
                int insert = writeMapper.insertList(list);
                if (insert != number) {
                    //如果插入的总数不等于我们插入预期,回滚数据并返回错误信息
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return new JSONResult(500, "请求失败请稍后再试");
                }
             //allNumber剩余总数小于1时结束循环
            } while (allNumber > 1);
    

    第二种方法:

        /**
         * 经实践,800一批插入相对较快,这个可以随便定义
         */
        private static final int MAX_INSERT_NUMBER = 800;
    
        public static void main(String[] args) {
    
            //需要插入的集合
            List<T> list = new ArrayList<T>();
            //需要插入总数
            int allNumber = list.size();
            //每次插入数量
            int insertNumber = MAX_INSERT_NUMBER;
            for (int i = 0; i < allNumber; i += insertNumber) {
                //作用为insertNumber最后没有800条数据则剩余几条newList中就装几条
                if (i + MAX_INSERT_NUMBER > allNumber) {
                    insertNumber = allNumber - i;
                }
                List<T> insertList = list.subList(i, i + insertNumber);
                //批量插入
                int insert = wirterMapper.insertList(insertList);
                if (insert != number) {
                    //如果插入的总数不等于我们插入预期,回滚数据并返回错误信息
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return new JSONResult(500, "请求失败请稍后再试");
                }
            }
        }
    
    展开全文
  • java】批量插入数据库数据

    千次阅读 2022-01-18 19:02:05
    在项目中往往需要一次向数据库中插入多条数据,如果使用for循环的方式插入,效率慢且资源消耗高 接下来看看如何批量将数据写入数据库中 一、Dao ReportSampleDao.java文件 import ...

    在项目中往往需要一次向数据库中插入多条数据,如果使用for循环的方式插入,效率慢且资源消耗高

    接下来看看如何批量将数据写入数据库中

    一、Dao

    ReportSampleDao.java文件

    import com.seewo.module.report.dto.ReportSampleReqDto;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Repository;
    import java.util.List;
    
    @Repository
    @Mapper
    public interface ReportSampleDao {
        /**
         * 批量插入报告详情数据
         */
        void batchAddSample(@Param("samples") List<ReportSampleReqDto> samples);
    }
    

    二、Mapper

    ReportSampleMapper.html文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.seewo.dao.dao.ReportSampleDao">
            <insert id="batchAddSample">
                INSERT INTO report_sample
                    (report_id, elapsed, label, response_code, response_message, url)
                VALUES
                        <foreach collection="samples" item="sample" index="index" separator=",">
                        (
                            #{sample.reportId},
                            #{sample.elapsed},
                            #{sample.label},
                            #{sample.responseCode},
                            #{sample.responseMessage},
                            #{sample.url}
                        )
                    </foreach>
            </insert>
    </mapper>
    

    三、调用

    ReportSampleImpl.java文件

    @Resource
    private ReportSampleDao reportSampleDao;
    
    public Integer saveErrorSampleList(String reportId){
    	List<ReportSampleReqDto> reportSamples = new ArrayList<>();
    	// ...
    	reportSampleDao.batchAddSample(reportSamples);
    }
    

    四、foreach collection的用法

    foreach元素的属性主要有item,index,collection,open,separator,close

    • item:集合中每一个元素进行迭代时的别名
    • index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置
    • open:该语句以什么开始
    • separator:在每次进行迭代之间以什么符号作为分隔符
    • close:以什么结束

    在使用foreach时最关键也最容易出错的是collection属性,该属性是必须指定的,在不同情况下collection属性的值不一样,有3种情况:

    1. 如果传入的是单参数且参数类型是一个List时,collection属性值为list
    2. 如果传入的是单参数且参数类型是一个array数组时,collection的属性值为array
    3. 如果传入的参数是多个时,需要把它们封装成一个Map,当然单参数也可

    4.1 单参数List类型

    collection的值为list时,对应的Mapper如下:

    <select id="dynamicForeachTest" parameterType="java.util.List" resultType="Blog">
         select * from t_blog where id in
           <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                   #{item}       
           </foreach>    
    </select>
    

    测试代码:

    @Test
    public void dynamicForeachTest() {
        SqlSession session = Util.getSqlSessionFactory().openSession();      
        BlogMapper blogMapper = session.getMapper(BlogMapper.class);
        List ids = new ArrayList();
        ids.add(1);
        ids.add(3);
        ids.add(6);
        List blogs = blogMapper.dynamicForeachTest(ids);
        for(Blog blog : blogs)
             System.out.println(blog);
         session.close();
     }
    

    4.2 单参数array数组类型

    collection为array时,对应的Mapper代码

    <select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog">
       select * from t_blog where id in
       <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
            #{item}
       </foreach>
    </select>    
    

    测试代码:

    @Test
    public void dynamicForeach2Test() {
        SqlSession session = Util.getSqlSessionFactory().openSession();
        BlogMapper blogMapper = session.getMapper(BlogMapper.class);
        int[] ids = new int[] {1,3,6,9};
        List blogs = blogMapper.dynamicForeach2Test(ids);
        for (Blog blog : blogs)
         	System.out.println(blog);    
        session.close();
    }
    

    4.3 参数封装成Map类型

    collection的值为ids,是传入的参数Map的key,对应的Mapper代码

    <select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog">
           select * from t_blog where title like "%"#{title}"%" and id in
           <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
    	          #{item}
           </foreach>
    </select>
    

    测试代码:

    @Test
    public void dynamicForeach3Test() {
    		SqlSession session = Util.getSqlSessionFactory().openSession();
    	    BlogMapper blogMapper = session.getMapper(BlogMapper.class);
    	    final List ids = new ArrayList();
    	    ids.add(1);
    	    ids.add(2);
    	    ids.add(3);
    	    ids.add(6);
    	    ids.add(7);
    	    ids.add(9);
    	    Map params = new HashMap();
    	    params.put("ids", ids);
    	    params.put("title", "中国");
    	    List blogs = blogMapper.dynamicForeach3Test(params);
    	    for(Blog blog : blogs)
    	         System.out.println(blog);
    	    session.close();
     }
    
    展开全文
  • mybatis insert 插入多条数据

    千次阅读 2020-10-23 16:55:46
    MySql/ORacle 批量新增插入
  • springboot的框架mybatis插入多条数据

    千次阅读 2020-04-24 15:16:34
    最近遇到一个需求,就是保存数据,一次性保存很,之前我都是一的insert,那样一来其实浪费了很io,效率不高,因因此,批量插入,安排起来!! mapper的方法是这样写的。 int insertBatch(List<...
  • Java系列:怎么快速插入 100 条数据,用时最短! 前言 今天博主将为大家分享Java系列:怎么快速插入 100 条数据,用时最短!不喜勿喷,如有异议欢迎讨论! 有一个强大的地基才能写出健壮的程序! 线程插入(单表...
  • java向mysql数据库批量插入大量数据

    千次阅读 2022-03-31 13:59:15
    首先看下我们的目标:向mysql数据库中批量插入10000条数据 操作环境:Mysql和Java代码都运行在我本地Windows电脑(i7处理器,4核,16G运行内存,64位操作系统 1、JPA单线程执行 代码省略,大概需要39S左右 2、JPA...
  • 只要学我一样编写这么一个工具类便可以实现批量插入多条数据,百条,千条,万条,后期还会继续优化增加数据时的速度!有点代码基础的保证能看懂,此项目已经有了前端界面你可以直接的导入然后运行测试既可以了,表...
  • 一次Insert插入多条数据的方法

    千次阅读 2019-07-29 15:14:29
    一次Insert插入多条数据的方法 插入的数据为 List类型 <insert id="insertEveryDay" parameterType="java.lang.Integer"> insert into attendance_record(userinfo_id) values <foreach collection="list...
  • for (ProductSkuBranch productSkuBranch : list) { //插入实体类数据的接口 count = queryDeptsService.count(productSkuBranch); } return filterNull(json); } } Maper Integer count(ProductSkuBranch ...
  • Java mybatis 插入10w 条数据

    千次阅读 2020-03-21 11:22:26
    Java mybatis 插入10w 条数据 Java + mybatis + MySQL 分批次,list 循环插入 java service 代码 public void batchInsert() { // 每次插入记录数 int size = 2000; // 总共执行插入操作次数 int i = 0; /...
  • Mybatis——一次插入多条数据

    千次阅读 2019-12-04 17:09:04
    一、前言 之前项目采取遍历一次添加一次的操作,感觉频繁...insert id="insertMoreMods" parameterType="java.util.ArrayList"> insert into product_mods (product_id,module_type,mac,imei,imsi) values ...
  • 使用MyBatis的话,它帮你生成的方法一般只是单操作,如果要查询或者插入大量的数据时用for的话显然效率很低,所以要通过自定义Mapper方法和foreach标签来写sql语句 首先要满足以下条件 配置好generatorConfig.xml...
  • Java实现快速的批量插入数据

    千次阅读 2020-12-23 16:03:48
    一次向数据库中插入多条数据 什么是快速插入数据 快速地向数据库中插入数据 什么是快速的批量插入数据 一次向数据库中快速的批量插入数据,速度快到无需等待 在Java开发中,不论是导入Excel还是单纯的批量...
  • ![图片说明](https://img-ask.csdn.net/upload/201904/11/1554992843_701139.png)![图片说明](https://img-ask.csdn.net/upload/201904/11/1554992857_350141.png)![图片说明]...
  • Oracle 中 insert 同时插入多条数据

    千次阅读 2020-12-16 13:09:38
    Oracle 中 insert 同时插入多条数据1. 语句2. Mybatis 1. 语句 Oracle 与 Mysql 不同. 多条插入命令不一样. INSERT ALL INTO t_table ("col1", "col2", "col3") VALUES ('val1', 'val2', 'val3') INTO t_table (...
  • excel导出数据到数据库(oracle),当数据库中的数据有上万时,如何进行批量操作 这里我用的分批操作,直接上代码: private void createBatchList(List<Map<String, Object>> list){//这个list就是批量...
  • Mybatis一次性插入多条数据

    万次阅读 多人点赞 2019-05-25 09:01:13
    标签进行循环插入,这种方法相对于controller层的for循环一条条插入,不论是效率还是数据库消耗都较之于后一种又很大提升。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//...
  • Java 批量插入数据库(MySQL)数据

    千次阅读 2021-01-27 01:22:23
    实现Java批量插入数据库数据,在javaeye中看到过几篇关于实现Java批量插入数据库数据,转载时没有找到,就自己写一下,也算是对自己学习过程中所遇到过的问题做一个总结。一般关于批量向数据库插入数据都采用...
  • **目的:Spring中线程向mysql插入同一条数据冲突问题 ** 环境: 系统:win10 环境:idea 201901 一、问题 程序中会使用线程读写数据库,在同一时刻个线程插入相同主键的相同数据时,会直接报错。 二...
  • Mysql使用java代码快速插入100W数据

    千次阅读 2019-08-07 14:47:42
    有两种方法可以快速插入大量数据:一种是使用java代码实现;另一种是使用数据库存储过程。 首先,你必须有一个数据表,注意数据表的引擎,在构建表时使用MyISAM引擎,MyISAM插入比InnoDB快得,因为Inn...
  • 如何用insert into values插入多条数据

    万次阅读 2019-05-07 16:25:25
    insert into 表名(字段名1,字段名2)values(值a1,值b1), (值a2,值b2), 例如: insert into user_info (user_account,user_name,user_age,user_class) values (‘00001’, '张三 ',‘20’,‘计算机系’), (‘00002...
  • java分批量插入数据数据量太大)

    千次阅读 2020-08-22 12:36:43
    分批插入,每次插入600条数据! public void insertList(List<Student> list) { int insertLength = list.size(); int i = 0; while (insertLength > 600) { dao.insertList(list.subList(i, i + ...
  • 关于insert语句,相信大多数程序开发人员都比较熟悉,在平时开发过程中用的最多的可能就是单表单条插入、单表多条插入的用法,使用多表多条插入的用法则用的比较少,今天我们就一起看下: 第一种:单表单条插入 ...
  • put向hbase中插入数据 package com.test.demo01; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase...
  • java向Mongodb批量插入大量数据

    千次阅读 2020-08-13 14:28:20
    ... import org.bson.Document; import java.util.ArrayList; import java.util.Date; import java.util.List; public class BatchInsertMongoDB { private static MongoClient mongoClient =.
  • 有一个线程的问题,就是假如 我有一个文件,然后这个文件有很多条数据,假如有两个字段,一个学号一个钱,(我的需求是,读取文件,把数据插入到表里,先拿文件的学号去查表有这个数据,就把钱进行相加,没有就新增...
  • 通过以上可以得出结论,在使用jdbc大批量插入数据时, 明显使用第三种方式(PreparedStatement + 批处理)性能更优。 ------------------------------------------------------------------------------------------...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 238,678
精华内容 95,471
关键字:

java 插入多条数据 怎么搞

java 订阅