`

Visual C++ 读写 MySQL

阅读更多

 http://mingxuehi.blog.163.com/blog/static/5681389820091122409324/

 

看过很多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++编写的,在别的系统可能需要做少量修改即可。
分享到:
评论

相关推荐

    visual c++图书馆管理系统

    Visual C++通过ODBC(Open Database Connectivity)和ADO(ActiveX Data Objects)接口,可以方便地连接到各种数据库系统,如SQL Server或MySQL,实现图书信息的存储和检索。 3. **多线程处理**:对于大型图书馆,...

    实战突击:Visual C++项目开发案例整合(源代码11-21章

    《实战突击:Visual C++项目开发案例整合》涵盖了11至21章的源代码,提供了多个实际应用系统的实现,旨在帮助读者深入理解和掌握Visual C++在实际开发中的运用。这些章节涵盖了一系列不同领域的管理系统,如汽配管理...

    Visual C++实用程序100例

    Visual C++结合ODBC(Open Database Connectivity)或ADO(ActiveX Data Objects)可以轻松访问各种类型的数据库,如SQL Server、Oracle、MySQL等。实例可能包括连接数据库、执行SQL语句、处理结果集以及事务处理等...

    Visual C++ 管理系统开发经典案例

    《Visual C++ 管理系统开发经典案例》是一本专为希望掌握使用Visual C++进行管理系统开发的程序员量身定制的参考资料。该书通过一系列实用的案例,深入浅出地介绍了如何运用Visual C++的强大功能来构建高效、稳定的...

    Visual C++实现选课系统源代码

    - **文件操作**:系统可能涉及读写配置文件、日志文件等,Visual C++ 提供的文件流类库对此提供了便利。 在深入研究提供的源代码前,开发者可以先了解上述技术概念,逐步理解代码逻辑。同时,通过调试和注释分析,...

    Visual C++图书管理程序实例源代码

    源代码将展示如何在C++中进行文件操作,如打开、读写和关闭文件。 9. **多线程**:如果图书管理系统有后台任务,如定期同步远程数据库或更新书籍信息,那么源代码可能会包含多线程编程的示例,以确保这些任务不会...

    Visual C++通讯录管理系统实例

    《Visual C++ 实现通讯录管理系统详解》 在信息技术领域,开发一款实用的通讯录管理系统是常见的需求。本文将深入探讨如何使用Visual C++作为开发工具,结合MFC(Microsoft Foundation Classes)数据库类和ODBC...

    图书管理系统Visual C++

    《图书管理系统Visual C++》是一个基于C++编程语言开发的软件项目,主要目的是为了实现对图书馆内部书籍资源的高效管理和便捷检索。在这个系统中,开发者利用Visual C++的MFC(Microsoft Foundation Classes)库,...

    Visual C++ 数据库

    当涉及到数据库操作时,Visual C++提供了多种方式来与各种数据库系统交互,如Microsoft SQL Server、Oracle、MySQL等。本篇文章将深入探讨Visual C++中与数据库相关的知识点。 1. **ODBC(Open Database ...

    Visual C++课程设计案例精编B

    《Visual C++课程设计案例精编B》是针对学习Visual C++编程的学员们提供的一份宝贵资源,由夏崇镨及其团队精心编撰。这份资料涵盖了多个实际应用的数据库管理系统的课程设计案例,旨在帮助学生和开发者深入理解和...

    《Visual C++开发典型模块大全》一书的源代码.part18

    《Visual C++开发典型模块大全》是一本专为C++开发者设计的实用指南,它涵盖了在实际项目开发中经常会遇到的各种模块。这本书的源代码部分是其精华所在,提供了丰富的实例,帮助读者深入理解并应用C++编程技术。源...

    Visual C++ 6.0数据库与网络开发实例

    在Visual C++ 6.0中,可以使用ODBC数据库驱动程序来连接到不同的数据库,如Oracle、MySQL或SQL Server。`CDatabase` 类与ODBC一起使用,允许创建数据库连接,执行SQL查询,并处理结果集。 3. **ADO**:ADO是微软...

    《Visual C++开发典型模块大全》一书的源代码.part14

    5. **数据库接口**:Visual C++可以连接多种数据库,如SQL Server、Oracle或MySQL。源代码可能包括ODBC或ADO接口的使用,演示如何执行查询、事务管理以及数据持久化。 6. **多线程同步**:C++标准库提供线程支持,...

    VisualC++数据库开发典型模块与实例精讲.pdf_part1

    本书讲解了使用Visual C++开发数据库系统的经典模块和工程实例。本书的内容分为三部分,第一部分介绍了Visual C++数据库开发的常用技巧和技术,并给出相关的学习建议。第二部分介绍了使用Visual C++开发数据库时常...

    renshiguanli.rar_visual c

    《Visual C++与人事管理程序开发详解》 Visual C++是一款由Microsoft开发的强大集成开发环境,主要用于编写Windows应用程序。在Windows平台下,它以其高效、灵活性和丰富的库支持深受程序员喜爱。本篇将深入探讨...

    tut8Code(1).zip_MySQL数据库_Visual_C++_

    在“_Visual_C++”的上下文中,可能是讲解如何利用C++与MySQL数据库进行交互,即通过C++编写程序来连接、查询和操作MySQL数据库。 结合压缩包内的文件名,如`tut8q3_L2104.ini`和`.s`文件,这些可能代表课程练习或...

    wendan.rar_visual c_删除客户信息_用户信息

    Visual C++提供了标准库(如fstream)来处理文件读写,或者使用Boost库进行更高级的操作。 4. **用户界面设计**:在删除客户信息的场景中,通常会涉及到GUI(图形用户界面)设计。Visual C++的MFC库提供了一系列...

Global site tag (gtag.js) - Google Analytics