mysql批量插入数据的基类
2016-09-01 16:19
309 查看
自己设计的一个mysql数据库批量添加数据的基类。用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错。
1、基类实现-BatchAddBase
2、一个简单的子类实现-PersonAddHelper
3、控制台项目,使用示例
4、源码示例地址:http://files.cnblogs.com/files/renjing/MysqlBatchAdd.rar
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; } = 1000 * 10; /// <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 - 1, 1); MySqlHelper.ExecuteNonQuery(this.InsertHead + sqlCache.ToString()); sqlCache.Clear(); } } if (sqlCache.Length > 0) { sqlCache.Remove(sqlCache.Length - 1, 1); 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 = 100000; for (int i = 1; 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
相关文章推荐
- 基于角色的访问控制RBAC的mysql表设计
- 【MySQL 06】事务处理
- Mycat实现mysql读写分离及故障切换
- mac os 上安装MySQLdb报sh: mysql_config: command not found解决办法
- mysqlWorkBench导入csv文件
- MySql存储引擎的选取
- MySQL数据的主从复制、半同步复制和主主复制详解
- MySql索引总结
- mysql主从复制和读写分离
- 通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
- 基于CentOS 6.8平台最新源代码包编译安装LAMP环境搭建(Apache+MySQL+PHP)
- MySQL数据库负载很高的解决办法
- MySQL 插入数据时,中文乱码问题的解决
- mysql 中的 my.ini 配置文件
- MySQL中的类Decode用法
- MySQL修改字符集为utf8mb4以支持 emoji 表情符号
- MySQL没有 data 目录的解决方法或者重建 data 目录
- MySQL修改数据表存储引擎的3种方法介绍
- MySQL编译安装
- mysql → INSERT ... ON DUPLICATE KEY UPDATE