精华内容
下载资源
问答
  • 数据库批量插入数据
    2021-12-07 22:23:52

    mysql

    #创建测试表
    CREATE TABLE `user` (
      `id` varchar(32) DEFAULT NULL,
      `name` varchar(255) DEFAULT NULL,
      `age` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    #编写存储过程
    DROP PROCEDURE IF EXISTS procedure_test;
    DELIMITER $ #这一步是因为,正常的sql中是以分号(;)为结尾,遇见分号就说明该段sql执行完了,但是在存储过程中很明显遇见分号,并没有执行完成,所以该段语句则为将结束语句的标识符(;)替换为($),数据库中一般用$或者//代替;
    CREATE PROCEDURE procedure_test() #创建存储过程
    BEGIN
        DECLARE i INT DEFAULT 1; #声明变量
        WHILE i <= 10 DO
    insert into user ( 
        id,
        name,
        age)
     values (replace(UUID(), '-', ''), CONCAT('zhangsan',i), 18);
        SET i = i+1;
        END WHILE;
    END $
    
    CALL procedure_test(); #调用存储过程
    

    ORACLE

    --创建测试表
    CREATE TABLE "TEST_USER" (
    	"ID" VARCHAR2 ( 32 ) NOT NULL ENABLE,
    	"U_NAME" VARCHAR2 ( 255 ),
    	"U_AGE" NUMBER ( *, 0 ),
    	PRIMARY KEY ( "ID" ) 
    )
    
    DECLARE
    	i INTEGER DEFAULT 0; --声明变量
    BEGIN
    	FOR i IN 1..10 LOOP
    	INSERT INTO TEST_USER (ID, U_NAME, U_AGE) VALUES (i, 'test' || i, 20);
    END LOOP;
    END;
    
    更多相关内容
  • 数据库批量添加数据的方法

    千次阅读 2021-09-07 21:01:11
    数据库批量添加数据的方法 使用查询列表的办法来批量添加数据。 比如: insert into 表名 (字段名) select 字段名 from 自定义表 在数据库函数这里写dbo.split方法,分割字符串 SQL实现split函数,自定义分割...

    数据库批量添加数据的方法

    使用查询列表的办法来批量添加数据。
    比如:

    insert into 表名 (字段名) select 字段名 from 自定义表
    
    1. 在数据库函数这里写dbo.split方法,分割字符串

    在这里插入图片描述
    SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
    自定义取出第几个分割字符前的字符串,默认位置(0)
    格式:dbo.split(字段名,‘分隔字符’,取出的第几个字符串)
    如果没有分隔的字符,则返回整个字符串。
    如果取出的位置字符串的位置超出Index则返回空。

    USE [数据库名]
    GO
    /****** Object:  UserDefinedFunction [dbo].[Split]    Script Date: 2021/9/7 21:04:51 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER FUNCTION [dbo].[Split]
    (
     @SplitString varchar(8000),-- nvarchar(4000)
     @Separator varchar(2) = ',' 
    )
    RETURNS @SplitStringsTable TABLE
    (
     [id] int identity(1,1),
     [value] varchar(8000)-- nvarchar(4000)
    )
    AS
    BEGIN
        DECLARE @CurrentIndex int;
        DECLARE @NextIndex int;
        DECLARE @ReturnText varchar(8000);-- nvarchar(4000)
        SELECT @CurrentIndex=1;
        WHILE(@CurrentIndex<=len(@SplitString)) 
        BEGIN
            SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
            IF(@NextIndex=0 OR @NextIndex IS NULL)
                SELECT @NextIndex=len(@SplitString)+1;
            
            SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
            
            if(len(@ReturnText)>0)
    			INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);        
            SELECT @CurrentIndex=@NextIndex+1;
        END
        RETURN;
    END
    
    1. 批量插入数据时,现将列表值分割,再从分割后的表里进行插入。
    insert into1( 字段名)
    SELECT pn.value as pn,isnull(k.列名2,'') as 字段名,'{0}' as Years,'{1}'  as Months,t.value as TotalNum,pmc.value as pmc
     FROM dbo.split('{2}',',') pn
    LEFT  JOIN2名 k on k.列名1=pn.value
    INNER JOIN (SELECT * FROM dbo.split('{3}',',')) as t on pn.id=t.id //查找分割后的值
    INNER JOIN (SELECT * FROM dbo.split('{4}',',')) as pmc on pn.id=pmc.id
    INNER JOIN (SELECT * FROM dbo.split('{5}',',')) as w on pn.id=w.id
    LEFT  JOIN  S_PN as sp on sp.PN=pn.value", 字段名1...字段名6) //字段分别对应{}里的值
    
    
    1. 下面介绍SQL server的一个免费插件,可以快速搜索定位SqlServer里面的文件名,关键字,函数等

    https://www.red-gate.com/products/ SqlServer查询工具
    在这里插入图片描述

    展开全文
  • 实现层次1:使用PreparedStatment一行行插入 public static void InsertTypeOne(int rows) { // 一行行插入 Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.GetConnection();...

    实现层次1:使用PreparedStatment一行行插入

    public static void InsertTypeOne(int rows) {
        // 一行行插入
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JDBCUtils.GetConnection();
            String sqlstr = "insert into user_info(name,email)values(?,?)";
            ps = conn.prepareStatement(sqlstr);
            for (int i = 1; i <= rows; i++) {
                ps.setObject(1, "name_" + i);
                ps.setObject(2, i + "@gmail.com");
                ps.execute();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.CloseResource(conn, ps);
        }
    }
    

    实现层次2:使用addBatch(),executeBatch(),clearBatch()攒一波批量插入

    public static void InsertTypeTwo(int rows) {
        // 使用addBatch(),executeBatch(),clearBatch() 批量插入数据
        // mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。
        // ?rewriteBatchedStatements=true 写在配置文件的url后面
        // 如之前是 jdbc:mysql://localhost:3306/stock?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
        // 更新为  jdbc:mysql://localhost:3306/stock?rewriteBatchedStatements=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JDBCUtils.GetConnection();
            String sqlstr = "insert into user_info(name,email)values(?,?)";
            ps = conn.prepareStatement(sqlstr);
            for (int i = 1; i <= rows; i++) {
                ps.setObject(1, "name_" + i);
                ps.setObject(2, i + "@gmail.com");
                // 1. 攒sql
                ps.addBatch();
                if (i % 500 == 0){
                    // 2. 攒一批执行一次
                    ps.executeBatch();
                    // 3. 执行后要清空一下
                    ps.clearBatch();
                }else if (i == rows){
                    ps.executeBatch();
                    ps.clearBatch();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.CloseResource(conn, ps);
        }
    }
    

    实现层次3:在2的基础上,关闭自动提交

    public static void InsertTypeThree(int rows) {
        // 插入数据时先禁止自动提交,数据全部execute后,再进行提交,最后再恢复自动提交
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JDBCUtils.GetConnection();
            // 1. 设置不自动提交数据
            conn.setAutoCommit(false);
            String sqlstr = "insert into user_info(name,email)values(?,?)";
            ps = conn.prepareStatement(sqlstr);
            for (int i = 1; i <= rows; i++) {
                ps.setObject(1, "name_" + i);
                ps.setObject(2, i + "@gmail.com");
                // 1. 攒sql
                ps.addBatch();
                if (i % 500 == 0) {
                    // 2. 攒一批执行一次
                    ps.executeBatch();
                    // 3. 执行后要清空一下
                    ps.clearBatch();
                } else if (i == rows) {
                    ps.executeBatch();
                    ps.clearBatch();
                }
            }
            // 2. 提交数据
            conn.commit();
            // 3. 提交完再设置自动提交
            conn.setAutoCommit(true);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.CloseResource(conn, ps);
        }
    }
    

    在本地测试时,效率如下:

    public static void main(String[] args) {
        int rows = 20000;
        long tstart = System.currentTimeMillis();
        //        InsertTypeOne(rows);// 插入 20000 行数据,共耗时 41748
        //        InsertTypeTwo(rows);// 插入 20000 行数据,共耗时 904
        InsertTypeThree(rows);// 插入 20000 行数据,共耗时 846
        long tend = System.currentTimeMillis();
        System.out.println("插入 " + rows + " 行数据,共耗时 " + (tend - tstart));
    }
    

    其中,方式3在数据量增大的情况下,是会有明显地效率提升。这里只使用了2万行数据,体现得不明显。

    package batchinsert;
    
    import utils.JDBCUtils;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    
    public class BatchInsert {
        public static void main(String[] args) {
            int rows = 20000;
            long tstart = System.currentTimeMillis();
    //        InsertTypeOne(rows);// 插入 20000 行数据,共耗时 41748
    //        InsertTypeTwo(rows);// 插入 20000 行数据,共耗时 904
            InsertTypeThree(rows);// 插入 20000 行数据,共耗时 846
            long tend = System.currentTimeMillis();
            System.out.println("插入 " + rows + " 行数据,共耗时 " + (tend - tstart));
        }
    
        public static void InsertTypeOne(int rows) {
            // 一行行插入
            Connection conn = null;
            PreparedStatement ps = null;
            try {
                conn = JDBCUtils.GetConnection();
                String sqlstr = "insert into user_info(name,email)values(?,?)";
                ps = conn.prepareStatement(sqlstr);
                for (int i = 1; i <= rows; i++) {
                    ps.setObject(1, "name_" + i);
                    ps.setObject(2, i + "@gmail.com");
                    ps.execute();
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.CloseResource(conn, ps);
            }
        }
    
        public static void InsertTypeTwo(int rows) {
            // 使用addBatch(),executeBatch(),clearBatch() 批量插入数据
            // mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。
            // ?rewriteBatchedStatements=true 写在配置文件的url后面
            // 如之前是 jdbc:mysql://localhost:3306/stock?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
            // 更新为  jdbc:mysql://localhost:3306/stock?rewriteBatchedStatements=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
            Connection conn = null;
            PreparedStatement ps = null;
            try {
                conn = JDBCUtils.GetConnection();
                String sqlstr = "insert into user_info(name,email)values(?,?)";
                ps = conn.prepareStatement(sqlstr);
                for (int i = 1; i <= rows; i++) {
                    ps.setObject(1, "name_" + i);
                    ps.setObject(2, i + "@gmail.com");
                    // 1. 攒sql
                    ps.addBatch();
                    if (i % 500 == 0) {
                        // 2. 攒一批执行一次
                        ps.executeBatch();
                        // 3. 执行后要清空一下
                        ps.clearBatch();
                    } else if (i == rows) {
                        ps.executeBatch();
                        ps.clearBatch();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.CloseResource(conn, ps);
            }
        }
    
        public static void InsertTypeThree(int rows) {
            // 插入数据时先禁止自动提交,数据全部execute后,再进行提交,最后再恢复自动提交
            Connection conn = null;
            PreparedStatement ps = null;
            try {
                conn = JDBCUtils.GetConnection();
                // 1. 设置不自动提交数据
                conn.setAutoCommit(false);
                String sqlstr = "insert into user_info(name,email)values(?,?)";
                ps = conn.prepareStatement(sqlstr);
                for (int i = 1; i <= rows; i++) {
                    ps.setObject(1, "name_" + i);
                    ps.setObject(2, i + "@gmail.com");
                    // 1. 攒sql
                    ps.addBatch();
                    if (i % 500 == 0) {
                        // 2. 攒一批执行一次
                        ps.executeBatch();
                        // 3. 执行后要清空一下
                        ps.clearBatch();
                    } else if (i == rows) {
                        ps.executeBatch();
                        ps.clearBatch();
                    }
                }
                // 2. 提交数据
                conn.commit();
                // 3. 提交完再设置自动提交
                conn.setAutoCommit(true);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.CloseResource(conn, ps);
            }
        }
    }
    
    展开全文
  • 主要介绍了JDBC连接MySQL数据库批量插入数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 向数据库批量插入大量数据

    千次阅读 2020-12-25 19:27:55
    后来才发现要批量执行的话,JDBC连接URL字符串中需要新增一个参数:rewriteBatchedStatements=true 例如:jdbc:mysql://127.0.0.1:8080/xihudb?rewriteBatchedStatements=true 没有 rewriteBatchedStatements=true ...

    1. addBatch(sql)

    Class.forName("com.mysql.jdbc.Driver");//指定连接类型
    Connection con = DriverManager.getConnection(url, username, password);
    PreparedStatement pst = con.prepareStatement("");
    for (int i = 0; i < 10; i++) {
        StringBuilder sql = new StringBuilder();
        sql.append("INSERT INTO extenal_studentcj(grade,clazz,zkzh,NAME,scoretext,times) VALUES(");
        sql.append("'").append(i).append("',");
        sql.append("'").append(i).append("',");
        sql.append("'").append(i).append("',");
        sql.append("'").append(i).append("',");
        sql.append("'").append(i).append("',");
        sql.append("'").append(i).append("'");
        sql.append(");");
        pst.addBatch(sql.toString());
    }
     
     
    pst.executeBatch();
    pst.close();
    con.close();
    

    2. addBatch()

    Class.forName("com.mysql.jdbc.Driver");//指定连接类型
            Connection con = DriverManager.getConnection(url, username, password);
     
            String sql = "INSERT INTO extenal_studentcj(grade,clazz,zkzh,NAME,scoretext,times) VALUES(?,?,?,?,?,?)";
            PreparedStatement pst = con.prepareStatement(sql);
            for (int i = 0; i < 10; i++) {
                int idx = 1;
                pst.setString(idx++, i + "");
                pst.setString(idx++, i + "");
                pst.setString(idx++, i + "");
                pst.setString(idx++, i + "");
                pst.setString(idx++, i + "");
                pst.setLong(idx++, i);
                pst.addBatch();
            }
            pst.executeBatch();
            pst.close();
            con.close();
    

    后来才发现要批量执行的话,JDBC连接URL字符串中需要新增一个参数:rewriteBatchedStatements=true

    例如:jdbc:mysql://127.0.0.1:8080/xihudb?rewriteBatchedStatements=true

    没有 rewriteBatchedStatements=true 则都是forEach. 开启后 addBatch(),addBatch(sql)使用的都是一次发送

    3. 拼接SQL语句

    拼接SQL

    <insert id="insert" parameterType="com.Info">
        insert into pp (str1, str2)
        values
        <foreach collection="ps" item="p" separator=",">
            (#{p.str1,jdbcType=VARCHAR},
            #{p.str2,jdbcType=VARCHAR},
        </foreach>
    </insert>
    

    三者之间的相对速度比较:
    JDBC BATCH(1)> Mybatis BATCH(2) > 拼接SQL(4)

    展开全文
  • 与.ctl文件配合使用 sqlldr userid=qxt_log/dddddd@172.16.0.0:21111/gdttt control=C:\Users\yilin\Desktop\input_147.ctl errors=10000000 pause
  • 本文实例讲述了php批量添加数据与批量更新数据的实现方法。分享给大家供大家参考。具体分析如下: php如果要批量保存数据我们只要使用sql的insert into语句就可能实现数据批量保存了,如果是更新数据使用update set就...
  • 第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server...
  • 项目(nodejs)中需要一次性插入多笔数据数据库数据库是mysql的,由于循环插入的性能太差,就像使用批量插入的方法提高数据的插入性能。 批量插入的数据库的表结构如下: 1.数据库连接 var mysql = require('...
  • 做android和ios开发的一般都用Sqlite数据库,有的时候数据需要批量导入,那么如何导入呢?  在这里,介绍2种方法供大家参考。  一、用sqlite命令  以windows系统为例,linux下命令是一样的。  1.安装...
  • 与.bat脚本配合使用 load data infile 'C:\Users\yilin\Desktop\abc.txt'  append into table FJH_TMP fields terminated by " " (A)
  • Jmeter向数据库批量插入数据

    万次阅读 多人点赞 2018-05-09 16:14:02
    Jmeter是一个轻量级的性能测试工具,这是已经总所周知的问题,今天我还知道了原来使用jmeter可以批量向数据库插入数据,这个功能在实际工作中也可以帮我们提高工作效率。在以往的项目中,当需要做批量数据的简单...
  • 主要为大家详细介绍了Android批量插入数据到SQLite数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 在数据库中需要大量插入或更新记录时,可以使用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。 1、 JDBC的批量处理语句: addBatch(String):添加需要批量处理的SQL语句或是参数; e
  • django 给数据库批量添加数据

    千次阅读 2019-07-31 19:06:00
    def index(request): ... 批量导入数据: Booklist=[] for i in range(100): Booklist.append(Book(title="book"+str(i),price=30+i*i)) Boo 转载于:https://www.cnblogs.com/o...
  • 主要给大家介绍C#.net中如何批量插入大量数据数据库中,本文涉及到C#.net中批量插入数据数据库中方面的内容,对C#.net批量插入数据数据库中感兴趣的朋友可以参考下本
  • 主要介绍了C#/.Net 中快速批量给SQLite数据库插入测试数据,本文直接给出实例代码,需要的朋友可以参考下
  • 只要学我一样编写这么一个工具类便可以实现批量插入多条数据,百条,千条,万条,后期还会继续优化增加数据时的速度!有点代码基础的保证能看懂,此项目已经有了前端界面你可以直接的导入然后运行测试既可以了,表...
  • PHPMYSQL数据库批量添加数据。首先接受过来的数据都在$_POST里,通过foreach我们来处理,我举个最简单的例子。 比如一些处理sql注入或js注入的函数叫check(); return 的是被处理后的结果,而非真或假。
  • 达梦数据库批量建表

    2018-01-05 15:52:40
    国产数据库达梦数据库,利用存储函数可以方便快捷建立大量测试用表
  • 但是当你需要测试大量数据时,比如要统计一年、一个月、一个星期的数据的区别,而且需求是必须每天都要有数据,这时就需要批量添加数据。在这里以user表为例,记录如何添加数据。 方法一:使用excel表格 方法二:...
  • MySQL数据库批量添加测试数据 使用Navicat视图化工具构建数据库 在数据库中找到函数项,右键新建过程函数,具体代码如下,执行即可添加一千条模拟数据: BEGIN declare i int; set i=1; while i<1001 ...
  • 向数据库批量添加数据

    千次阅读 2008-03-03 00:03:00
    declare @i intset @i=1while @ibegin insert into news(title,contents) values(标题+CONVERT(nvarchar(50),@i),新闻内容) set @i=@i+1end
  • 一、编写测试案例MySQL数据库中插入百万条数据。测试数据表建表脚本如下:use db_xk; drop table if exists tb_test2; create table tb_test2 ( id int primary key auto_increment, subject varchar(50) ...
  • 1、准备好格式化数据后的txt文件(格式化数据就是将不同字段的数据间用相同的分隔符分开,我用的是Tab符分隔) 原创文章 1获赞 2访问量 16 关注 私信 展开阅读全文 作者:weixin_46298946
  • 源码批量添加到SQLServer和Mysql数据库。源码包含有不同方法的添加,第一种逐条添加,第二种批量加入,其批量加实现原理其实就是把数据存入内存表(DataTable)中使用Backcopy一次性加入数据库。添加dll引用即可调用...
  • 批量数据库添加数据

    千次阅读 2019-08-20 21:22:07
      Connection conn = getCon(); //获取连接已经封装过的方法 ... Long beginTime = System.currentTimeMillis();...试了一下,如果是简单的数据,即便添加百万,千万条数据也仅需要若干秒。
  • 主要介绍了mybatis 批量将list数据插入到数据库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 利用jmeter向数据库插入批量数据

    千次阅读 2020-10-22 17:00:14
    使用jmeter可以批量向数据库插入数据,这个功能在实际工作中也可以帮我们提高工作效率。 接下来开始介绍jmeter如何向数据库插入批量数据 1、首先先添加CSVDataSetConfig,用于读取我们的大批量文件 1.1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,829
精华内容 52,731
关键字:

向数据库批量添加数据