自己设计的一个mysql数据库批量添加数据的基类。用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错。

1、基类实现-BatchAddBase

 using System.Collections.Generic;
using System.Text; namespace MysqlBatchAdd
{
public abstract class BatchAddBase<T> where T : class, new()
{
/// <summary>
/// 插入语句的头部
/// </summary>
protected abstract string InsertHead { get; } /// <summary>
/// 出入语句的执行体
/// </summary>
protected List<string> InsertBodyList { get; set; } = new List<string>();
/// <summary>
/// 缓存的sql语句长度
/// </summary>
public int SqlCacheLengh { get; set; } = * ; /// <summary>
/// 批量添加的方法
/// </summary>
/// <param name="m"></param>
public abstract void BatchAdd(T m); /// <summary>
/// 执行添加
/// </summary>
public virtual void ExecuteBatchAdd()
{
StringBuilder sqlCache = new StringBuilder(); foreach (string insertBody in InsertBodyList)
{
sqlCache.Append(insertBody + ","); if (sqlCache.Length >= SqlCacheLengh)
{
sqlCache.Remove(sqlCache.Length - , );
MySqlHelper.ExecuteNonQuery(this.InsertHead + sqlCache.ToString());
sqlCache.Clear();
}
} if (sqlCache.Length > )
{
sqlCache.Remove(sqlCache.Length - , );
MySqlHelper.ExecuteNonQuery(this.InsertHead + sqlCache.ToString());
sqlCache.Clear();
}
}
/// <summary>
/// 清楚缓存
/// </summary>
public void ClearInsertBody()
{
this.InsertBodyList.Clear();
}
}
}

2、一个简单的子类实现-PersonAddHelper

 namespace MysqlBatchAdd
{
public class PersonAddHelper : BatchAddBase<Person>
{
protected override string InsertHead
{
get
{
return @"insert into person(
name) values ";
}
} public override void BatchAdd(Person m)
{
this.InsertBodyList.Add($@" (
'{m.name}')");
}
}
}

3、控制台项目,使用示例

 static void Main(string[] args)
{
PersonAddHelper personAddHelper = new PersonAddHelper(); Stopwatch watch = new Stopwatch(); watch.Start(); int amount = ; for (int i = ; i <= amount; i++)
{
personAddHelper.BatchAdd(new Person() { name = i + "号" });
} personAddHelper.ExecuteBatchAdd(); watch.Stop(); Console.WriteLine($"成功插入 {amount} 条数据,用时:{watch.ElapsedMilliseconds} ms"); Console.ReadKey();
}

4、源码示例地址:http://files.cnblogs.com/files/renjing/MysqlBatchAdd.rar

mysql批量插入数据的基类的更多相关文章

  1. MySQL批量插入数据的几种方法

    最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...

  2. python使用MySQLdb向mySQL批量插入数据的方法

    该功能通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理. 今天用这个函数完成了批量插入 例程: def test_insertDB(options) ...

  3. mysql批量插入数据优化

    一.问题 很早以前做了一个更新功能,就是将A表中的数据全部查找出来,相对B表中改变的数据更新B表,B表中没有的数据插入B表. 最近发现该功能执行速率减慢,有时还跑超时.原来是A表中数据渐渐变多,就有了 ...

  4. mysql 批量插入数据

    MySQL使用INSERT插入多条记录,应该如何操作呢?下面就为您详细介绍MySQL使用INSERT插入多条记录的实现方法,供您参考. 看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语 ...

  5. mysql 批量插入数据过多的解决方法

    使用场景: 测试时需要插入100w的数据,跑sql脚本插入非常慢. 存储过程如下: //DELIMITER DROP PROCEDURE if EXISTS createAmountCount; cr ...

  6. Mysql 批量插入数据的方法

    使用的方式是 MySqlBulkLoader 方法如下: 1. 转化datatable 为文件 2. 使用MySqlBulkLoader 进行数据的加载 代码: public static void ...

  7. mysql——批量插入数据

    要测试一下新功能,需要测试环境下的数据库有大量的数据,一个个插入显然不现实,需要了解一下存储过程 https://www.cnblogs.com/endtel/p/5407455.html Navic ...

  8. mysql 批量插入数据存储过程

    create procedure pFastCreateNums (cnt int unsigned) begin declare s int unsigned default 1; truncate ...

  9. mysql批量插入数据

    建表 create table `dept`( `id` ) unsigned NOT NULL AUTO_INCREMENT, `deptno` mediumint() unsigned ', `d ...

随机推荐

  1. 学习ASP.NET MVC(五)——我的第一个ASP.NET MVC CURD页面

    在上一篇文章中我们已经创建了实体类,在这一篇文章中,我将创建一个新的控制器类——BookController,使用BookController对Books表中的数据进行CURD操作的方法,并使用视图模 ...

  2. javascript基础语法——表达式

    × 目录 [1]原始表达式 [2]复杂表达式 前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascr ...

  3. JAVA_Collection容器

    因为项目的需要,今天抽时间把JAVA中的容器复习了一下,为了以后的不时之需,现在把它记下来. 容器有其名,知其意,用来盛放数据的集合,JAVA中为我们提供了三种容器类:set.list.map,三种容 ...

  4. javaWeb之maven多数据库环境的配置信息

    在使用maven构建的web项目里,不管采用的是什么orm框架,数据库写死了必然不是最灵活的方式.所以通过maven 的buid方式可以动态的分配数据库信息 比如在jdbc.properties中,可 ...

  5. 使用AndroidStudio报错:INSTALL_FAILED_UPDATE_INCOMPATIBLE

    安装Android Studio后,用真机调试运行项目时出现:INSTALL_FAILED_UPDATE_INCOMPATIBLE这个错误 原因: 1. 可能是设备内存不足: 2. APP已经存在: ...

  6. GDB 和 windbg 命令对照(转载)

    From:http://blog.csdn.net/joeleechj/article/details/10020501 命令                                      ...

  7. 关于Entity Framework中的Attached报错相关解决方案的总结

    关于Entity Framework中的Attached报错的问题,我这里分为以下几种类型,每种类型我都给出相应的解决方案,希望能给大家带来一些的帮助,当然作为读者的您如果觉得有不同的意见或更好的方法 ...

  8. VUE2.0不可忽视的很多变化

    今天使用webpack-sample初始一个vue-cli项目,在app.vue文件中添加了个钩子函数ready,可是ready内的事件一直不执行,检查了webpack文件和package.json也 ...

  9. 【转】Xml序列化

    XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...

  10. 检测IP地址的正则表达式

    正则表达式: ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) ((2[0-4]\d|25[0-5]|[01]?\d\ ...