zoukankan      html  css  js  c++  java
  • mysql批量插入数据的基类

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

    1、基类实现-BatchAddBase

     1 using System.Collections.Generic;
     2 using System.Text;
     3 
     4 namespace MysqlBatchAdd
     5 {
     6     public abstract class BatchAddBase<T> where T : class, new()
     7     {
     8         /// <summary>
     9         /// 插入语句的头部
    10         /// </summary>
    11         protected abstract string InsertHead { get; }
    12 
    13         /// <summary>
    14         /// 出入语句的执行体
    15         /// </summary>
    16         protected List<string> InsertBodyList { get; set; } = new List<string>();
    17         /// <summary>
    18         /// 缓存的sql语句长度
    19         /// </summary>
    20         public int SqlCacheLengh { get; set; } = 1000 * 10;
    21 
    22         /// <summary>
    23         /// 批量添加的方法
    24         /// </summary>
    25         /// <param name="m"></param>
    26         public abstract void BatchAdd(T m);
    27 
    28         /// <summary>
    29         /// 执行添加
    30         /// </summary>
    31         public virtual void ExecuteBatchAdd()
    32         {
    33             StringBuilder sqlCache = new StringBuilder();
    34 
    35             foreach (string insertBody in InsertBodyList)
    36             {
    37                 sqlCache.Append(insertBody + ",");
    38 
    39                 if (sqlCache.Length >= SqlCacheLengh)
    40                 {
    41                     sqlCache.Remove(sqlCache.Length - 1, 1);
    42                     MySqlHelper.ExecuteNonQuery(this.InsertHead + sqlCache.ToString());
    43                     sqlCache.Clear();
    44                 }
    45             }
    46 
    47             if (sqlCache.Length > 0)
    48             {
    49                 sqlCache.Remove(sqlCache.Length - 1, 1);
    50                 MySqlHelper.ExecuteNonQuery(this.InsertHead + sqlCache.ToString());
    51                 sqlCache.Clear();
    52             }
    53         }
    54         /// <summary>
    55         /// 清楚缓存
    56         /// </summary>
    57         public void ClearInsertBody()
    58         {
    59             this.InsertBodyList.Clear();
    60         }
    61     }
    62 }

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

     1 namespace MysqlBatchAdd
     2 {
     3     public class PersonAddHelper : BatchAddBase<Person>
     4     {
     5         protected override string InsertHead
     6         {
     7             get
     8             {
     9                 return @"insert into person(
    10 name) values ";
    11             }
    12         }
    13 
    14         public override void BatchAdd(Person m)
    15         {
    16             this.InsertBodyList.Add($@" (
    17 '{m.name}')");
    18         }
    19     }
    20 }

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

     1 static void Main(string[] args)
     2         {
     3             PersonAddHelper personAddHelper = new PersonAddHelper();
     4 
     5             Stopwatch watch = new Stopwatch();
     6 
     7             watch.Start();
     8 
     9             int amount = 100000;
    10 
    11             for (int i = 1; i <= amount; i++)
    12             {
    13                 personAddHelper.BatchAdd(new Person() { name = i + "" });
    14             }
    15 
    16             personAddHelper.ExecuteBatchAdd();
    17 
    18             watch.Stop();
    19 
    20             Console.WriteLine($"成功插入 {amount} 条数据,用时:{watch.ElapsedMilliseconds} ms");
    21 
    22             Console.ReadKey();
    23         }

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

  • 相关阅读:
    [转]游戏开发指南
    [转]C++接口定义及实现举例
    [转]关于模板函数/模板类编译成DLL
    [转]游戏程序员要求
    [转]如何定位Release程序崩溃原因
    [转]对0基础MFC者的一点建议
    [转]链接警告 LNK4098
    动态调用WCF
    动态添加删除WCF服务类包
    将Xaml文档转成XPS文档[转]
  • 原文地址:https://www.cnblogs.com/renjing/p/MysqlBatchAdd.html
Copyright © 2011-2022 走看看