1、概述:
为了把繁琐的操作简化成简单的类,设计了2个类用来封装了mysql的常用操作,以便使用者可以方便地使用。

2、组成

1)数据库操作类CDatabaseConnect

2)SQL对象类CSqlStatement

3、类的头文件代码

#include <winsock.h>

#include "mysql.h"

#include <string>

using namespace std;

//MYSQL的返回码类型

#define MYSQL_OK
0

#define MYSQL_FALSE
!(MYSQL_OK)

#define MYSQL_ERROR
1

//SQL的SQL语句类型

#define MYSQL_SQL_TYPE_INSERT
0

#define MYSQL_SQL_TYPE_QUERY
1

//字符串的大小

#define MYSQL_CHAR_SIZE
0xFF+1

#define MYSQL_STRING_SIZE
0xFF+1

#define MYSQL_VARCHAR_SIZE
0xFFFF+1

#define MYSQL_VAR_STRING_SIZE
0xFFFF+1

#define MYSQL_MEDIUMBLOB_SIZE
0xFFFFFF+1

#define MYSQL_LONGBLOB_SIZE
0xFFFFFFFF+1

//日志入口函数指针

typedef void(*PAddLogFunc)(const char *pszData);

//数据库连接参数

typedef struct tagSTConnectParam

{


char szUser[64+1];
//用户名称


char szPasswd[64+1];
//用户密码


char szHost[64+1];
//主机名称


char szDbName[64+1];
//数据库名称


char *pszSocket;
//socket


unsigned int nPort;
//端口号


unsigned long ucClientFlag;
//客户端标识

}STConnectParam, *PSTConnectParam;

//SQL预处理对象

class CSqlStatement

{

public:


CSqlStatement();


CSqlStatement(MYSQL* pDb);


virtual ~CSqlStatement();

private:


friend class CDatabaseConnect;


CSqlStatement(MYSQL* pDb, const char *pszSqlStatement);

public:

    //行数


int GetRowCount(void);

    //列数


int GetColumnCount(void);


//nPosIndex started by zero


//列名称


const char *GetColumnName(int nPosIndex);

    //列ID


int GetColumnIndex(const char *pszColumnName);


//获取整型


int GetColumnValueInt(int nPosIndex);

    //获取短字符串


const char *GetColumnValueVarChar(int nPosIndex);

    //获取长字符串


const char *GetColumnValueString(int nPosIndex);

    //获取字符串


const char *GetColumnValueBlob(int nPosIndex, int *pnLen);

    //获取浮点型


double GetColumnValueDouble(int nPosIndex);

    //绑定整型


bool BindInt(int nPosIndex, const int &nValue);

    //绑定短字符串


bool BindChar(int nPosIndex, const char *pszValue);

    //绑定长字符串


bool BindString(int nPosIndex, const char *pszValue);

    //绑定字符串


bool BindBlob(int nPosIndex, const char *pszValue, int nBlobBytes);


//获取浮点型


bool BindDouble(int nPosIndex, const double &fValue);


//运行


bool Execute(void);

    //下一行


bool NextRow(void);

    //复位


bool Reset(void);

    //写日志


int WriteDbLog(const char *pszMsg);

    //设置SQL预处理对象


int SetSqlStatement(const char *pszSqlStatement);

private:

    //初始化数据


bool InitData(void);

    //释放数据


void FreeData(void);

private:

    //日志函数接口


PAddLogFunc pAddLog;


MYSQL_STMT *m_pStmt;


MYSQL* m_pDb;


MYSQL_RES *m_pPrepareMetaResult;


MYSQL_BIND *m_pBind;


unsigned long *m_plStringLen;


my_bool *m_pbArray;


int *m_pnDataArray;


double *m_pfDataArray;


char **m_pszDataArray;


string m_strSql;


string m_strErrMsg;


int m_nRowCount;


int m_nColumnCount;


int m_nSqlType;


int m_nBindParamFlag;

};

typedef CSqlStatement *PCSqlStatement;

//数据库连接

class CDatabaseConnect

{

public:


CDatabaseConnect();


virtual ~CDatabaseConnect();


//打开


bool Open(PSTConnectParam pstParam);

        //关闭


bool Close(void);

        //获取MySQL对象指针


MYSQL *GetMySQL(void);

        //获取指定表名称的记录个数


int  GetTableRecordCount(const char *pszTabelName);

        //写日志


int WriteDbLog(const char *pszMsg);

        //运行SQL语句


bool DirectStatement(const char *pszSqlStatement);

        //产生SQL预处理对象


CSqlStatement* SetSqlStatement(const char *pszSqlStatement);

        //释放SQL对象


void ReleaseStatement(void);

        //获取指定SQL语句的查询记录个数


int GetRecordCount(const char *szSql);


//事务


bool BeginTransaction(void);


bool CommitTransaction(void);


bool RollbackTransaction(void);

public:


MYSQL * m_pDb;

private:


PAddLogFunc pAddLog;


CSqlStatement *m_pSqlStatement;


string m_strDbName;


string m_strSql;


string m_strErrMsg;

};

mysql的常用操作的封装的更多相关文章

  1. DBA必备:MySQL数据库常用操作和技巧

    DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...

  2. Linux下mysql的常用操作

    Linux下mysql的常用操作: 显示数据库 show databases; 选择数据库 use 数据库名; 显示数据库中的表 show tables; 显示数据表的结构 describe 表名; ...

  3. ubuntu下安装mysql及常用操作

    1.可通过ps -ef | grep mysql命令查看系统中是否有安装mysql 如果出现类似上述的页面,就证明是已经安装过了mysql,否则就是没有. 2.安装mysql 很简单,只需要键入如下命 ...

  4. 网站用户行为分析——在Ubuntu下安装MySQL及其常用操作

    安装MySQL 使用以下命令即可进行mysql安装,注意安装前先更新一下软件源以获得最新版本: sudo apt-get update #更新软件源 sudo apt-get install mysq ...

  5. Linux下MySql数据库常用操作

    1.显示数据库 show databases; 2.选择数据库 use 数据库名; 3.显示数据库中的表 show tables; 4.显示数据表的结构 describe 表名; 5.显示表中记录 S ...

  6. mysql之常用操作

    1. 数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数 ...

  7. mysql的常用操作

    基本操作 #1 操作文件夹(库) 增 create database db1 charset utf8; --指定格式为utf8 查 show databases; --查看所有的数据库 show c ...

  8. Mysql之常用操作(2)

    Windows服务 -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值 ...

  9. MySQL数据库常用操作和技巧

    MySQL数据库可以说是DBA们最常见和常用的数据库之一,MySQL的广泛应用,也使更多的人加入到学习它的行列之中.下面是老MySQL DBA总结的MySQL数据库最常见和最常使用的一些经验和技巧,分 ...

随机推荐

  1. keil将程序装入外部FLASH具体解释

    在实际项目中,常常出现芯片的内部FLASH空间不够的情况,这就须要将程序分一部分装到外部FLASH中. 为了让大家能少走些弯路,在这里把我在这当中遇到的一些问题和经验教训给大家分享一下. 仅供參考,假 ...

  2. BOOST 线程完全攻略 - 扩展 - 可被关闭的线程类

    本文假设读者已经基本了解boost线程库的使用方法. boost是个开源工程,线程这一块也在不断完善之中,到现在这个阶段,boost::thread仅仅实现了一个完美的技术框架,但是读者在实际使用中会 ...

  3. phpStudy + JspStudy 2014.10.02 下载

    phpStudy + JspStudy 2014.10.02 下载 目标:让天下没有难配的php环境. phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Teng ...

  4. [HeadFist-HTMLCSS学习笔记][第七章CSS入门:加一点样式]

    CSS入门 style元素设置CSS 基本格式 <style type="text/css"> body { background-color: #eaf3da; } ...

  5. 面试前的准备---C#知识点回顾----02

    经过昨天大量的简历投递,今天陆续收到面试邀约,明日准备大战一场,是死是活一试便知 1.数据库的范式 这算入门问题了吧,但凡是个数据库类的,都得问吧, 但我们在回答的时候开始背书啦 第一范式(1NF)无 ...

  6. Mysql 复制表结构 及其表的内容

    顺便转一下Mysql复制表结构.表数据的方法: 1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们 ...

  7. MVC自我学起之MVCMusic开发中遇到问题:musicstore edit方法出错的原因和解决方法

    错误提示: 存储区更新.插入或删除语句影响到了意外的行数(0).实体在加载后可能被修改或删除.刷新 ObjectStateManager 项. 解决案: 1.在view中或model中增加隐藏id 1 ...

  8. MagicalRecord(简化CoreData操作)

    1.新建项目不勾选coredata 2.pod 'MagicalRecord' 3.新建模型文件 4.添加实体和属性 5.Create NSManagedObject subclass 6.增 Per ...

  9. IOS Block 反向传值

    1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结 ...

  10. (转)eclipse 代码自动补全

    转自:http://blog.csdn.net/yushuwai2010/article/details/11856129 一般默认情况下,Eclipse的代码提示功能是比MicrosoftVisua ...