mysql批量插入数据的基类
自己设计的一个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批量插入数据的基类的更多相关文章
- MySQL批量插入数据的几种方法
最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...
- python使用MySQLdb向mySQL批量插入数据的方法
该功能通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理. 今天用这个函数完成了批量插入 例程: def test_insertDB(options) ...
- mysql批量插入数据优化
一.问题 很早以前做了一个更新功能,就是将A表中的数据全部查找出来,相对B表中改变的数据更新B表,B表中没有的数据插入B表. 最近发现该功能执行速率减慢,有时还跑超时.原来是A表中数据渐渐变多,就有了 ...
- mysql 批量插入数据
MySQL使用INSERT插入多条记录,应该如何操作呢?下面就为您详细介绍MySQL使用INSERT插入多条记录的实现方法,供您参考. 看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语 ...
- mysql 批量插入数据过多的解决方法
使用场景: 测试时需要插入100w的数据,跑sql脚本插入非常慢. 存储过程如下: //DELIMITER DROP PROCEDURE if EXISTS createAmountCount; cr ...
- Mysql 批量插入数据的方法
使用的方式是 MySqlBulkLoader 方法如下: 1. 转化datatable 为文件 2. 使用MySqlBulkLoader 进行数据的加载 代码: public static void ...
- mysql——批量插入数据
要测试一下新功能,需要测试环境下的数据库有大量的数据,一个个插入显然不现实,需要了解一下存储过程 https://www.cnblogs.com/endtel/p/5407455.html Navic ...
- mysql 批量插入数据存储过程
create procedure pFastCreateNums (cnt int unsigned) begin declare s int unsigned default 1; truncate ...
- mysql批量插入数据
建表 create table `dept`( `id` ) unsigned NOT NULL AUTO_INCREMENT, `deptno` mediumint() unsigned ', `d ...
随机推荐
- VisualSVN-Server 安装以及使用教程
VisualSVN Server是免费的(代码管理工具),VisualSvn Server是SVN的服务器端 官网下载地址 安装VisualSVN-Server示例: 下载完安装包后,以安装Visua ...
- Linq 查询结果 可能遵循 2 º,2¹,2 ²,......增长计算
static void Main(string[] args) { , , , , , , , , }; var obj = from item in array orderby item ascen ...
- 深入理解CSS中的长度单位
前面的话 本文分为绝对长度单位和相对长度单位来介绍CSS中的长度单位的主要知识 绝对长度单位 绝对长度单位代表一个物理测量 像素px(pixels) 在web上,像素px是典型的度量单位,很多其他长度 ...
- 深入理解CSS定位中的堆叠z-index
× 目录 [1]定义 [2]堆叠规则 [3]堆叠上下文[4]兼容 前面的话 对于所有定位,最后都不免遇到两个元素试图放在同一位置上的情况.显然,其中一个必须盖住另一个.但,如何控制哪个元素放在上层,这 ...
- 如何安装Oracle Instant Client
Oracle Instant Client是Oracle发布的轻量级数据库客户端,下面我们来看看官方的定义: Instant Client allows you to run your applica ...
- 什么是WeakHashMap--转
原文地址:http://laravel.iteye.com/blog/2303244 Java WeakHashMap 到底Weak在哪里,它真的很弱吗?WeakHashMap 的适用场景是什么,使用 ...
- php操作mongodb中的ISODate格式日期
mongodb 中数据记录的日期格式为"dateCreated" : ISODate("2011-12-20T07:22:50.836Z")经过翻阅php官网中 ...
- 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)
一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...
- js每天进步一点点2
JS之图片的切换效果
- c#字符串操作方法实例
# 字符串是使用 string 关键字声明的一个字符数组.字符串是使用引号声明的,如下例所示: string s = "Hello, World!"; 字符串对象是“不可变的”,即 ...