`
evget
  • 浏览: 144676 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类

用C++操作MySQL数据库类

阅读更多
文章关键字:|C++|MySQL|数据库|类|实例|

用C++操作MySQL数据库类:

注释:这几个类对处理不是很大数据量的操作是很理想的, 但不适宜特大型的数据的查询,因为源码中将查询到的数据直接放入了内存。

/*
*  project:
*           通用模块 ( 用 c++ 处理  mysql 数据库类,像ADO )
*                 
*  description:
*
*           通过DataBase,RecordSet,Record,Field类,实现对mysql数据库的操作
*    包括连接、修改、添加、删除、查询等等,像ADO一样操作数据库,使
*    用方便
*
*          ( the end of this file have one sample,
*                    welcom to use... )
*
--*/

#ifndef ZLB_MYSQL_H
#define ZLB_MYSQL_H

#include "mysql.h"

#include <iostream>
#include <vector>
#include <string>

using namespace std;

namespace zlb_mysql{

/*
  * 字段操作
*/
class Field
{
public :
  /* 字段名称 */
  vector<string> m_name;
  /* 字段类型 */
  vector<enum_field_types> m_type;
public :
  Field();
  ~Field();

  /* 是否是数字 */
  bool IsNum(int num);
  /* 是否是数字 */
  bool IsNum(string num);
  /* 是否是日期 */
  bool IsDate(int num);
  /* 是否是日期 */
  bool IsDate(string num);
  /* 是否是字符 */
  bool IsChar(int num);
  /* 是否是字符 */
  bool IsChar(string num);
  /* 是否为二进制数据 */
  bool IsBlob(int num);
  /* 是否为二进制数据 */
  bool IsBlob(string num);
  /* 得到指定字段的序号 */
  int GetField_NO(string field_name);
};

/*
  * 1 单条记录
  * 2 [int ]操作 [""]操作
*/
class Record
{
public:
  /* 结果集 */
  vector<string> m_rs;
  /* 字段信息 占用4字节的内存 当记录数很大是回产生性能问题 */
  Field *m_field;
public :
  Record(){};
  Record(Field* m_f);
  ~Record();

  void SetData(string value);
  /* [""]操作 */
  string operator[](string s);
  string operator[](int num);
  /* null值判断 */
  bool IsNull(int num);
  bool IsNull(string s);
  /* 用 value tab value 的形式 返回结果 */
  string GetTabText();
};

/*
  * 1 记录集合
  * 2 [int ]操作 [""]操作
  * 3 表结构操作
  * 4 数据的插入修改
*/
class RecordSet
{
private :
  /* 记录集 */
  vector<Record> m_s;
  /* 游标位置*/
  unsigned long pos;
  /* 记录数 */
  int m_recordcount;
  /* 字段数 */
  int m_field_num;
  /* 字段信息 */
  Field  m_field;

  MYSQL_RES * res ;
  MYSQL_FIELD * fd ;
  MYSQL_ROW row;
  MYSQL* m_Data ;
public :
  RecordSet();
  RecordSet(MYSQL *hSQL);
  ~RecordSet();

  /* 处理返回多行的查询,返回影响的行数 */
  int ExecuteSQL(const char *SQL);
  /* 得到记录数目 */
  int GetRecordCount();
  /* 得到字段数目 */
  int GetFieldNum();
  /* 向下移动游标 */
  long MoveNext();
  /* 移动游标 */
  long Move(long length);
  /* 移动游标到开始位置 */
  bool MoveFirst();
  /* 移动游标到结束位置 */
  bool MoveLast();
  /* 获取当前游标位置 */
  unsigned long GetCurrentPos()const;
  /* 获取当前游标的对应字段数据 */
  bool GetCurrentFieldValue(const char * sFieldName,char *sValue);
  bool GetCurrentFieldValue(const int iFieldNum,char *sValue);
  /* 获取游标的对应字段数据 */
  bool GetFieldValue(long index,const char * sFieldName,char *sValue);
  bool GetFieldValue(long index,int iFieldNum,char *sValue);
  /* 是否到达游标尾部 */
  bool IsEof();

  /* 返回字段 */
  Field* GetField();
  /* 返回字段名 */
  const char * GetFieldName(int iNum);
  /* 返回字段类型 */
  const int GetFieldType(char * sName);
  const int GetFieldType(int iNum);
  /* 返回指定序号的记录 */
  Record operator[](int num);

};

/*
  * 1 负责数据库的连接关闭
  * 2 执行sql 语句(不返回结果)
  * 3 处理事务
*/
class DataBase
{
public :
  DataBase();
  ~DataBase();
private :
  /* msyql 连接句柄 */
  MYSQL* m_Data;
public :
  /* 返回句柄 */
  MYSQL * GetMysql();
  /* 连接数据库 */
  int Connect(string host, string user,
   string passwd, string db,
   unsigned int port,
   unsigned long client_flag);

  /* 关闭数据库连接 */
  void DisConnect();
  /* 执行非返回结果查询 */
  int ExecQuery(string sql);
  /* 测试mysql服务器是否存活 */
  int Ping();
  /* 关闭mysql 服务器 */
  int ShutDown();
  /* 主要功能:重新启动mysql 服务器 */
  int ReBoot();
  /*
  * 说明:事务支持InnoDB or BDB表类型
        */
  /* 主要功能:开始事务 */
  int Start_Transaction();
  /* 主要功能:提交事务 */
  int Commit();
  /* 主要功能:回滚事务 */
  int Rollback();
  /* 得到客户信息 */
  const char * Get_client_info();
  /* 主要功能:得到客户版本信息 */
  const unsigned long  Get_client_version();
  /* 主要功能:得到主机信息 */
  const char * Get_host_info();
  /* 主要功能:得到服务器信息 */
  const char * Get_server_info();
  /*主要功能:得到服务器版本信息*/
  const unsigned long  Get_server_version();
  /*主要功能:得到 当前连接的默认字符集*/
  const char *  Get_character_set_name();

  /* 主要功能返回单值查询  */
  char * ExecQueryGetSingValue(string sql);

  /* 得到系统时间 */
  const char * GetSysTime();
  /* 建立新数据库 */
  int Create_db(string name);
  /* 删除制定的数据库*/
  int Drop_db(string name);
};

};

#endif //ZLB_MYSQL_H

#include "stdafx.h"
#include "zlb_mysql.h"

namespace zlb_mysql{

/* +++++++++++++++++++++++++++++++++++++++++++++++++++ */
/*
  * 字段操作
*/
Field::Field(){}
Field::~Field(){}
/*
  * 是否是数字
*/
bool Field::IsNum(int num)
{
  if(IS_NUM(m_type[num]))
   return true;
  else
   return false;
}
/*
  * 是否是数字
*/
bool Field::IsNum(string num)
{
  if(IS_NUM(m_type[GetField_NO(num)]))
   return true;
  else
   return false;
}
/*
  * 是否是日期
*/
bool Field::IsDate(int num)
{
  if( FIELD_TYPE_DATE == m_type[num] ||
   FIELD_TYPE_DATETIME == m_type[num] )
   return true;
  else
   return false;
}
/* 是否是日期 */
bool Field::IsDate(string num)
{
  int temp;
  temp=GetField_NO(num);
  if(FIELD_TYPE_DATE == m_type[temp] ||
     FIELD_TYPE_DATETIME == m_type[temp] )
   return true;
  else
   return false;
}
/*
  * 是否是字符
*/
bool Field::IsChar(int num)
{
  if(m_type[num]==FIELD_TYPE_STRING  ||
   m_type[num]==FIELD_TYPE_VAR_STRING ||
   m_type[num]==FIELD_TYPE_CHAR )
   return true;
  else
   return false;
 
}
/*
  * 是否是字符
*/
bool Field::IsChar(string num)
{
  int temp;
  temp=this->GetField_NO (num);
  if(m_type[temp]==FIELD_TYPE_STRING  ||
   m_type[temp]==FIELD_TYPE_VAR_STRING ||
   m_type[temp]==FIELD_TYPE_CHAR )
   return true;
  else
   return false;
}
/*
  * 是否为二进制数据
*/
bool Field::IsBlob(int num)
{
  if(IS_BLOB(m_type[num]))
   return true;
  else
   return false;
}
/*
  * 是否为二进制数据
*/
bool Field::IsBlob(string num)
{
  if(IS_BLOB(m_type[GetField_NO(num)]))
   return true;
  else
   return false;
}
/*
  * 得到指定字段的序号
*/
int Field::GetField_NO(string field_name)
{  
 
  for(unsigned int i=0;i<m_name.size ();i++)
  {
   if(!m_name[i].compare (field_name))
    return i;
  
  }
  return -1;
}
/*-----------------------------------------------------*/



未完,原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9231
分享到:
评论

相关推荐

    C++操作mysql数据库封装

    zynq平台mysql数据库C++操作代码 zynq平台mysql数据库C++操作代码 zynq平台mysql数据库C++操作代码 zynq平台mysql数据库C++操作代码 zynq平台mysql数据库C++操作代码 zynq平台mysql数据库C++操作代码 zynq平台mysql...

    C++连接mysql数据库 源代码

    1. **MySQL C++ Connector**: 连接MySQL数据库时,通常会使用MySQL官方提供的C++ Connector,这是一个用于C++应用程序的数据库驱动程序,它提供了与MySQL服务器通信的接口。通过该接口,C++程序能够执行SQL查询,...

    基于C和C++连接MySQL数据库实现简单的学生(或职工)信息管理系统,源于大学时的数据库课程设计.zip

    使用C和C++连接MySQL数据库并进行常用的数据库操作。实现了简单的学生(或职工)信息管理系统,源于大学时的数据库课程设计.zip 使用C和C++连接MySQL数据库并进行常用的数据库操作。实现了简单的学生(或职工)信息...

    c++封装MYSQL数据库连接代码

    1. **C++与MySQL连接库**:MySQL为C++提供了一个名为`mysqlcppconn`的库,它允许开发者使用C++接口来操作MySQL数据库。这个库包含了`mysql.h`头文件和对应的动态或静态链接库文件,例如`libmysqlcppconn.so`(Linux...

    c++操作MySQL

    C++操作MySQL数据库是指使用C++语言来操作MySQL数据库的过程。本文将介绍C++操作MySQL数据库的基础知识点,包括准备工作、基础函数调用、连接、查询、插入、删除、修改数据表等。 一、准备工作 在使用C++操作MySQL...

    linux(centos) 下C++连接mysql数据库

    在Linux(CentOS)系统中,使用C++连接MySQL数据库是一项常见的任务,特别是在开发服务器端应用程序时。这里我们将深入探讨如何实现这一目标,以及在这个过程中可能遇到的关键知识点。 首先,你需要确保你的系统...

    基于C++和MySQL数据库的学生信息管理系统

    《基于C++和MySQL数据库的学生信息管理系统》 在信息技术领域,开发一个学生信息管理系统是常见的实践,这有助于教育机构高效地管理和更新学生的档案。本文将深入探讨一个利用C++编程语言和MySQL数据库构建的系统,...

    C++连接mysql数据库的两种方法

    C++连接MySQL数据库的两种方法主要可以分为使用ADO(ActiveX Data Objects)连接和使用MySQL提供的API函数。以下是两种方法的详细说明: 1. 使用ADO连接MySQL数据库 ADO是微软推出的数据访问技术,它允许通过编程...

    使用C和C++连接MySQL数据库并进行常用的数据库操作

    使用C和C++连接MySQL数据库并进行常用的数据库操作。实现了简单的学生(或职工)信息管理系统,源于大学时的数据库课程设计使用C和C++连接MySQL数据库并进行常用的数据库操作。实现了简单的学生(或职工)信息管理...

    c++链接mysql数据库类

    在这个主题中,我们将深入探讨如何利用C++链接MySQL数据库,以及如何使用提供的源代码类来简化这一过程。 首先,C++ Connector/MYSQL库提供了一系列的类和函数,例如`MYSQL`、`MYSQL_RES`、`MYSQL_ROW`等,用于执行...

    MySQL ODBC 用C++连接MySQL数据库

    3. **C++与ODBC连接**:在C++中,使用ODBC连接MySQL数据库通常涉及以下步骤: - 配置ODBC数据源:在操作系统层面设置ODBC数据源,包含数据库的URL、用户名、密码等信息。 - 包含ODBC头文件:在C++代码中,引入如`...

    C/C++实现mysql数据库的缓存管理

    C/C++实现mysql数据库的缓存管理 Linux下用C/C++写一个提高mysql数据库效率的数据缓存模块 缓存管理 window下用C/C++写一个提高mysql数据库效率的数据缓存模块 C/C++ mysql缓存 缓存 PS:记得要先把数据库给搭建起来

    C++操作mysql数据库之配置篇

    在C++编程中,与MySQL数据库进行交互是一个...总之,理解和熟练使用这些C++头文件是实现高效、安全的MySQL数据库操作的关键。通过学习和实践,开发者可以构建出可靠的C++应用程序,无缝地与MySQL数据库进行数据交互。

    c++操作mysql数据库控制台登录程序

    在C++编程中,连接和操作MySQL数据库是一项常见的任务,特别是在构建命令行应用程序或控制台登录程序时。本文将深入探讨如何使用C++与MySQL数据库进行交互,创建一个控制台登录系统。 首先,你需要安装MySQL的C++...

    dev c++ 连接 mysql 方法、库

    在IT行业中,数据库连接是开发过程中的重要...在实际项目中,你可能还需要处理错误、使用预编译语句防止SQL注入等问题,这些都是更高级的议题,但了解这些基础知识将帮助你开始构建与MySQL数据库交互的C++应用程序。

    使用C和C++连接MySQL数据库并进行常用的数据库操作。

    本主题将深入探讨如何使用C和C++连接MySQL数据库并执行常见的数据库操作。 首先,为了在C或C++中使用MySQL,我们需要包含MySQL的客户端库,即`libmysqlclient`。在Linux系统中,通常通过包管理器安装,而在Windows...

    C++基于数据库Mysql学生信息管理系统.zip

    C++基于数据库Mysql学生信息管理系统.zip C++基于数据库Mysql学生信息管理系统.zip C++基于数据库Mysql学生信息管理系统.zip C++基于数据库Mysql学生信息管理系统.zip C++基于数据库Mysql学生信息管理系统.zip ...

    C++操作MYSQL库类JDBC

    然而,C++没有内置的JDBC接口,所以这里提到的"C++操作MYSQL库类JDBC"可能是指用C++实现的一个类似JDBC的库,以便在C++程序中使用与JDBC相似的API来连接和操作MySQL数据库。 在C++中,通常我们会使用MySQL ...

    c++对数据库mysql 的操作

    本文将深入探讨如何使用C++对MySQL数据库进行操作。 首先,安装必要的库。为了在C++中连接到MySQL,我们需要安装MySQL Connector/C++,这是一个C++接口,使得C++程序能够与MySQL服务器通信。你可以从MySQL官方网站...

    C++开发MySQL数据库需要用到的开发库 libmysql

    本篇文章将深入探讨`libmysql`库的使用,以及它如何帮助C++开发者连接、查询和操作MySQL数据库。 `libmysql`是MySQL官方提供的一个C API(应用程序接口),它是为非Java应用设计的,特别是C和C++应用。这个库包含了...

Global site tag (gtag.js) - Google Analytics