`
jslfl
  • 浏览: 322420 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

C++ 读写MySQL经典

阅读更多
本文来自 http://blog.csdn.net/jemlee2002/article/details/1523164

看过很多C或是C++操作MySQL数据库的文章,大部分太吃力了,甚至有一部分根本没有很好的组织文字,初学者比较难以接受,即使是C++或是C高手也是比较难看懂。写这篇文章的目的不是别的,就一个,告诉您用MySQL的C API直接操作MySQL数据,并做了比较高效的封装,可以帮助开发人员大幅度提高采用MySQL的C API操作MySQL数据库的效率。
直接进入主题:
1、  准备工作
MySQL数据库安装之后在/MySQL Server 5.0/lib/opt目录下有所需要的各种文件,我们需要的只是以下几个:
libmysql.lib
libmysql.dll
同时需要/MySQL Server 5.0/include目录下的几个文件:
mysql_version.h
my_list.h
mysql_com.h
mysql_time.h
mysql.h
my_alloc.h
typelib.h

准备Socket的基本文件
在VC的安装目录Microsoft Visual Studio/VC98/Lib下找到:
WS2_32.LIB

把这些文件先准备好

2、  使用VC的AppWizard建立一个Win32 Console Application,其实可以是Dialog工程或是其他类型工程,比如工程取名CMySQL
3、  把刚才准备好的文件拷贝你的工程目录下,和普通的CPP文件在同一个目录即可
4、  建立之后,在VC的菜单栏点击Project(项目)->Settings(设置),弹出对话框,选择Link标签进入Link设置,在Object/library modules 的框里面加入
libmysql.lib[有个空格]WS2_32.LIB
5、    在工程建立添加以下两个文件:
第一个文件头文件:VspdCTOMySQL.h
/****************************MYSQL IN C*******************************/
/*************************2007 -03 -07 *******************************/
/*************************李克喜**************************************/


#include <stdio.h>
#include <string>
#include <afxsock.h>
#include "mysql.h"
using   namespace   std;
class VspdCToMySQL
{
public:
     
       //变量
       MYSQL mysql;

       /*
       构造函数和稀构函数
       */
       VspdCToMySQL();
       ~VspdCToMySQL();

       /*
       主要的功能:
       初始化数据库
       连接数据库
       设置字符集

       入口参数:
       host :MYSQL服务器IP
       port:数据库端口
       Db:数据库名称
       user:数据库用户
       passwd:数据库用户的密码
       charset:希望使用的字符集
       Msg:返回的消息,包括错误消息

       出口参数:
       int :0表示成功;1表示失败
       */
       int ConnMySQL(char *host,char * port,char * Db,char * user,char* passwd,char * charset,char * Msg);

       /*
       主要的功能:
       查询数据

       入口参数:
       SQL:查询的SQL语句
       Cnum:查询的列数
       Msg:返回的消息,包括错误消息

       出口参数:
       string 准备放置返回的数据,多条记录则用0x06隔开,多个栏位用0x05隔开
       如果 返回的长度= 0,责表示舞结果
       */
       string SelectData(char * SQL,int Cnum ,char * Msg);
     
       /*
       主要功能:
       插入数据
     
       入口参数
       SQL:查询的SQL语句
       Msg:返回的消息,包括错误消息

       出口参数:
       int :0表示成功;1表示失败
       */
       int InsertData(char * SQL,char * Msg);

       /*
       主要功能:
       修改数据
     
       入口参数
       SQL:查询的SQL语句
       Msg:返回的消息,包括错误消息

       出口参数:
       int :0表示成功;1表示失败
       */
       int UpdateData(char * SQL,char * Msg);


       /*
       主要功能:
       删除数据
     
       入口参数
       SQL:查询的SQL语句
       Msg:返回的消息,包括错误消息

       出口参数:
       int :0表示成功;1表示失败
       */
       int DeleteData(char * SQL,char * Msg);
     
       /*
       主要功能:
       关闭数据库连接
       */
       void CloseMySQLConn();

};
            


第二个文件实现文件:VspdCTOMySQL.cpp


/****************************MYSQL IN C*******************************/
/*************************2007 -03 -07 *******************************/
/*************************李克喜**************************************/

#include "stdafx.h"
#include "VspdCTOMySQL.h"

VspdCToMySQL::VspdCToMySQL()
{
}

VspdCToMySQL::~VspdCToMySQL()
{
}

//初始化数据
int VspdCToMySQL::ConnMySQL(char *host,char * port ,char * Db,char * user,char* passwd,char * charset,char * Msg)
{
       if( mysql_init(&mysql) == NULL )
       {
              Msg = "inital mysql handle error";
              return 1;
       }   

       if (mysql_real_connect(&mysql,host,user,passwd,Db,0,NULL,0) == NULL)
       {
              Msg = "Failed to connect to database: Error";
              return 1;
       }   

       if(mysql_set_character_set(&mysql,"GBK") != 0)
       {
              Msg = "mysql_set_character_set Error";
              return 1;
       }
       return 0;
}

//查询数据
string VspdCToMySQL::SelectData(char * SQL,int Cnum,char * Msg)
{
       MYSQL_ROW m_row;
    MYSQL_RES *m_res;
    char sql[2048];
    sprintf(sql,SQL);
       int rnum = 0;
       char rg = 0x06;//行隔开
       char cg = {0x05};//字段隔开

       if(mysql_query(&mysql,sql) != 0)
       {
              Msg = "select ps_info Error";
              return "";
       }
       m_res = mysql_store_result(&mysql);

       if(m_res==NULL)
       {
              Msg = "select username Error";
              return "";
       }
       string str("");
       while(m_row = mysql_fetch_row(m_res))
       {
              for(int i = 0;i < Cnum;i++)
              {
                     str += m_row[i];
                     str += rg;
              }
              str += rg;            
              rnum++;
       }

       mysql_free_result(m_res);

       return str;
}

//插入数据
int VspdCToMySQL::InsertData(char * SQL,char * Msg)
{
       char sql[2048];
    sprintf(sql,SQL);
       if(mysql_query(&mysql,sql) != 0)
       {
              Msg = "Insert Data Error";
              return 1;
       }
       return 0;
}

//更新数据
int VspdCToMySQL::UpdateData(char * SQL,char * Msg)
{
       char sql[2048];
    sprintf(sql,SQL);
       if(mysql_query(&mysql,sql) != 0)
       {
              Msg = "Update Data Error";
              return 1;
       }
       return 0;
}

//删除数据
int VspdCToMySQL::DeleteData(char * SQL,char * Msg)
{
       char sql[2048];
    sprintf(sql,SQL);
       if(mysql_query(&mysql,sql) != 0)
       {
              Msg = "Delete Data error";
              return 1;
       }
       return 0;
}

//关闭数据库连接
void VspdCToMySQL::CloseMySQLConn()
{
       mysql_close(&mysql);
}


6、 在main函数,(如果是其他工程级不是main了,可能是一个按钮里面的代码块)添加      一些代码,添加之后如下:
#include "stdafx.h"
#include "VspdCTOMySQL.h"

int main(int argc, char* argv[])
{
    char* host="MYSQL服务器IP";
    char* user="root";
    char* port ="3306";
    char* passwd="用户密码";
    char* dbname="数据库名称";
    char* charset = "GBK";//支持中文
    char* Msg = "";//消息变量
    //初始化
    VspdCToMySQL * vspdctomysql = new VspdCToMySQL;
    if(vspdctomysql->ConnMySQL(host,port,dbname,user,passwd,charset,Msg) == 0)
           printf("连接成功/r/n");
    else
           printf(Msg);
  
    //查询
    char * SQL = "SELECT ids,username,passwd,address FROM vcaccesstest";
    string str = vspdctomysql->SelectData(SQL,4,Msg);
    if( str.length() > 0 )
    {
           printf("查询成功/r/n");
           printf(str.data());
           printf("/r/n");
    }
    else
    {
           printf(Msg);
    }
    //插入
    SQL = "insert into vcaccesstest(ids,username,passwd,address) values(4,'我的','123210','测试地址')";
    if(vspdctomysql->InsertData(SQL,Msg) == 0)
           printf("插入成功/r/n");
    //更新
    SQL = "update vcaccesstest set username = '修改了',passwd='2345' where ids = 3 ";
    if(vspdctomysql->UpdateData(SQL,Msg) == 0)
           printf("更新成功/r/n");
    //删除
    SQL = "delete from vcaccesstest where ids = 3 ";
    if(vspdctomysql->DeleteData(SQL,Msg) == 0)
           printf("删除成功/r/n");

    vspdctomysql->CloseMySQLConn();

    return 0;
}

7、 数据库表确认表存在,(程序中的表和字段是我的数据库里面的内容,你要自己搞定你的SQL语句了,你可以看main函数里面的SQL变量的内容。
8、 编译,运行,一切ok。
9、 总结,你要做的事情很少了,两个主要的文件写好了,你看例子调用即可,其他MySQL的库文件和附加文件别人也为您准备好了,移植到其他系统也是很简单的,比如移植到Linux和Unix下也是很简单的,VspdCTOMySQL.h和VspdCTOMySQL.cpp基本上是采用标准的C++编写的,在别的系统可能需要做少量修改即可。
分享到:
评论

相关推荐

    QT C++ 读写mySQL数据库 图片 例子 QT-MySQL-vchar-int-picture-demo.zip

    这个"QT MySQL vchar int picture demo"是一个示例项目,它演示了如何在QT C++环境中使用MySQL数据库进行文本(vchar)、整数(int)以及图片数据的读写操作。下面我们将详细探讨相关的知识点。 1. **QT框架**:QT...

    vc++ 读写mysql 详细教程

    以上就是在VC++环境下使用MySQL Connector/C++进行读写操作的基本步骤。通过这些步骤,你可以构建简单的数据库应用程序,进行数据的插入、查询、更新和删除。当然,实际项目中可能需要处理更多细节,如错误处理、...

    Qt实现MySQL数据库读写

    在本文中,我们将深入探讨如何使用Qt框架来实现对MySQL数据库的读写操作。Qt是一个功能强大的跨平台应用程序开发框架,而MySQL则是一款广泛应用的关系型数据库管理系统。由于Qt本身并不直接支持MySQL,我们需要借助...

    c++ mysql学生信息管理系统

    myodbc驱动是一个ODBC(Open Database Connectivity)驱动程序,它允许C++等非SQL语言通过ODBC接口与MySQL数据库进行交互,从而实现数据的读写操作。 接下来,我们利用MFC库来构建用户界面。MFC是微软提供的一个C++...

    C++Builder连接局域网中MySQL.pdf

    最后,可以在服务器端使用MySQL管理工具(如Workbench)监控,查看客户端程序是否真的能够进行数据的读写操作,验证连接的稳定性与数据的一致性。 总之,C++Builder连接局域网中的MySQL数据库涉及多个步骤,包括...

    update mysql with c++

    本文将聚焦于如何利用C++语言与MySQL进行交互,实现图片数据的读写操作。 首先,我们需要理解C++与MySQL交互的基础,这涉及到MySQL的C API,即MySQL Connector/C库。这个库提供了C语言接口,允许开发者通过C++代码...

    c++ mysql 引用包

    总的来说,"c++ mysql 引用包"提供了在C++项目中与MySQL数据库交互的基础,开发者可以通过这些头文件实现对数据库的读写操作,构建复杂的数据处理逻辑。在使用过程中,需要注意错误处理、资源管理以及遵循最佳实践,...

    c++读写数据库操作

    本主题将深入探讨如何使用C++进行数据库读写操作,重点是MySQL数据库,并涉及存储过程的实现以及日志记录功能。 首先,C++本身并不直接支持数据库操作,但可以通过各种库来实现这一目标。在C++中处理MySQL数据库...

    C++Mysql8.0数据库跨平台编程实战.zip

    《C++与MySQL8.0跨平台数据库编程实战》 在现代软件开发中,数据库的使用至关重要,尤其是在大型系统中。本课程聚焦于C++与MySQL8.0的结合,教你如何在不同的操作系统环境下,如Windows和Ubuntu,进行高效、稳定的...

    mysql读写分离配置

    ### MySQL 读写分离配置详解 #### 环境配置 在进行MySQL读写分离配置前,我们需要确保有一个稳定的环境。本次配置环境为CentOS 7.2,并使用MySQL 5.7版本。 - **主数据库服务器(Master)**:192.168.206.100 - **...

    c++纯MYSQL制作的聊天软件源码

    在实现过程中,C++通过ODBC(Open Database Connectivity)或MySQL Connector/C++等接口连接到MYSQL数据库,进行数据的读写操作。ODBC是一个通用的数据库访问接口,允许C++代码与各种数据库系统进行通信,而MySQL ...

    C++ XML读写

    XML(eXtensible Markup Language)是一种...总的来说,C++中处理XML涉及多个步骤,包括选择合适的库、理解XML结构、以及使用库提供的API进行读写操作。理解这些基本概念和操作,将有助于在实际项目中灵活应用XML技术。

    mysql配置mysql-proxy读写分离1

    MySQL Proxy 是一个开源工具,它允许你在 MySQL 客户端和服务器之间设置一个代理层,以便实现诸如负载均衡、故障切换、读写分离等高级功能。在这个场景中,我们将讨论如何配置 MySQL Proxy 来实现读写分离,以提高...

    devC++开发的连接mysql

    通过MySQL Connector/C++,你可以创建连接、执行SQL语句并处理返回的结果,从而实现对数据库的读写操作。在实践中,确保正确配置开发环境,理解基本的数据库连接和操作流程,以及掌握错误处理和资源管理,这些都是...

    C++ 链接mysql 代码 简易封装和简单的一些使用方法

    通过这种方式,C++开发者可以轻松地与MySQL数据库进行交互,实现数据的读写和管理。不过,请确保在使用后关闭数据库连接,避免资源泄露。同时,记得对敏感信息如用户名和密码进行安全处理,避免明文存储。

    基于C++&Qt和MySQL的图书管理系统.zip

    数据访问层通过连接MySQL,实现对数据库的读写操作。 为了确保系统的稳定性和安全性,开发者可能还需要考虑以下几点: 1. 数据备份与恢复策略:定期备份数据库,以防数据丢失,并提供数据恢复机制。 2. 权限管理:...

    C++实现的Mysql和Oracle接口备份

    为了实现这些功能,你需要熟悉C++的文件I/O操作,了解如何读写文件,处理流,以及如何使用线程和异步操作提高备份性能。同时,理解SQL语法和数据库管理系统的基本原理也是必不可少的。 总的来说,C++实现的Mysql和...

Global site tag (gtag.js) - Google Analytics