///     /// Q4M队列操作基类     ///     ///     /// Author:luyifeng     /// Createday:2013 05 02     public abstract class MyQ4M : IQ4M     {         private bool _isGetData = false;         private MySqlConnection _conn = null;         private readonly string _connectionKey = null;         public T QueueItem { get; set; }         protected GanjiQ4M(string connectionKey)         {             _connectionKey = connectionKey;         }         public T First()         {             Dispose();             GetDb();             QueueItem = GetItem();             if (QueueItem != null)             {                 _isGetData = true;             }             return QueueItem;         }         protected abstract string GetItemSql();         private T GetItem()         {             string strSql = GetItemSql();             if (string.IsNullOrEmpty(strSql))             {                 throw new Exception("没有设置获取队列的sql语句");             }             var cmd = new MySqlCommand(strSql, _conn);             using (IDataReader reader = cmd.ExecuteReader())             {                 if (reader.Read())                 {                     var que = EntityHelper.TransformPoco(reader);                     return que;                 }             }             return default(T);         }         public void Remove()         {             //第一条数据出队             const string strSql = "select queue_end();";             ExcuteSql(strSql);             //状态恢复             ClearState();         }         public void Rollback()         {             //回滚数据             const string strSql = "select queue_abort();";             ExcuteSql(strSql);             //状态恢复             ClearState();         }         private void ExcuteSql(string sql)         {             var cmd = new MySqlCommand(sql, _conn);             cmd.ExecuteNonQuery();         }         private void GetDb()         {             if (string.IsNullOrEmpty(_connectionKey))             {                 throw new Exception("没有配置连接字符串key");             }             var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[_connectionKey].ConnectionString;             _conn = new MySqlConnection(connectionString);             _conn.Open();         }         private void ClearState()         {             _isGetData = false;             QueueItem = default(T);             if (_conn != null)             {                 if (_conn.State == ConnectionState.Open)                 {                     _conn.Close();                 }                 _conn.Dispose();             }         }         public void Dispose()         {             if (_isGetData)             {                 Rollback();             }         }             }

mysql q4m_Mysql Q4M 队列操作封装(二)相关推荐

  1. MySQL数据库用户管理操作(二)

    文章目录 一.数据表操作 1.克隆表 1.1 先克隆表,再克隆数据 1.2 克隆表的数据并创建表 2.清空表 2.1 delete清空表 2.2 truncate清空表 2.3 drop.trunca ...

  2. hive 操作(二)——使用 mysql 作为 hive 的metastore

    Hive 基础及安装 Hive 操作(一) hive 操作(二)--使用 mysql 作为 hive 的metastore hive 操作(三)--hive 的数据模型 hive 操作(四) hive ...

  3. 封装mysql数据库_快速掌握 Mysql数据库对文件操作的封装

    快速掌握 Mysql数据库对文件操作的封装 在查看Mysql对文件的操作中,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括open.close.seek等,在Win32下的文件和目录 ...

  4. mysql 操作封装

    mysql 操作封装 1.同步操作mysql import pymysql from sqlalchemy import create_engine import pandas as pd class ...

  5. php中使用redis队列操作实例代码

    例1,入队操作: <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); while(True){try{$value ...

  6. mysql 伪表查询语句_MySql系列05:MySql中DQL查询操作

    1.表的准备 准备四张表: dept(部门表).emp(员工表).salgrade(薪资等级表).bonus(奖金表) create table DEPT( DEPTNO int(2) not nul ...

  7. Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等

    MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...

  8. SRIO学习(七)——Direct I/O 操作(二)

    Direct I/O 操作(二) [上回书说到,LSU的CC位能够表示正在进行的传输的状态.] 中断和LSU释放 LSU的CC位能够表示正在进行的传输的状态,自然也能显示出执行过程中的错误,而且一点出 ...

  9. Linux下Mysql数据库的基础操作

    Linux下Mysql数据库的基础操作 一.Mysql数据介绍 二.数据库相关术语介绍 1.数据库相关名词 2.相关术语介绍 三.Mysql数据库的管理 1.创建数据库用户 2.查询用户状态 3.修改 ...

最新文章

  1. javascript捕获ocx事件
  2. 深度学习-Tensorflow2.2-批标准化简介-14
  3. HTML特效之团购页面效果
  4. vs android 压缩,Android Studio是否压缩classes.dex文件?
  5. 【AI视野·今日CV 计算机视觉论文速览 第170期】Mon, 25 Nov 2019
  6. python编程书籍资料整理大全
  7. Spring(二)--FactoryBean、bean的后置处理器、数据库连接池、引用外部文件、使用注解配置bean等...
  8. poj 3414 Pots(广搜BFS+路径输出)
  9. 损坏的主文件表_启动失败时如何手动修复Windows 10的MBR(主引导记录)
  10. [渝粤教育] 西南科技大学 大学物理 在线考试复习资料
  11. Android中Intent传递Java对象的方法
  12. 编译错误:GL/glew.h, GL/glut.h, EGL/egl.h没有那个文件或目录
  13. Java-多线程第二篇多线程相关认识(2)
  14. 华为S5700交换机堆叠
  15. python水果超市管理系统流程图_超市管理流程图-超市管理系统业务流程图
  16. Qt VS Tools插件官方下载及安装
  17. matlab分组形式条形图,Matplotlib带标签的分组条形图
  18. word文件怎么另存
  19. 滴滴顺风车女乘客遇害;华为法律应对澳 5G 禁令;苹果研发新背板技术|极客头条...
  20. 深圳及周边适合小朋友(3岁以下)玩的地方总结及交流[转载]

热门文章

  1. BJFU-ACM 12月8日月赛官方题解
  2. SQLServer 优化SQL语句:in 和not in的替代方案
  3. raspberry pi_如何使用Raspberry Pi构建WiFi相框
  4. 想唱你就唱卡拉ok_如何将电唱机与其他设备连接起来
  5. dreamhost 优惠码_DreamHost如何通过OpenStack重塑自己
  6. 面试 | 程序猿面试,Elasticsearch被坑被虐的体无完肤...
  7. Kali Linux 自定义分辨率
  8. HTML5 Canvas中绘制线段
  9. Vrep线程之间的切换
  10. 怎样在vrep child scirpt里定义自己写的函数