C++操作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

就是这几个文件("typelib.h" "my_alloc.h" "my_list.h" "mysql.h" "mysql_com.h" "mysql_time.h" "mysql_version.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、     在工程建立添加以下两个文件:
第一个文件头文件:DBMySQL.h
#pragma once
#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 ReplaceData(char * SQL,char * Msg);
 
       /*
       主要功能:
       修改数据
      
       入口参数
       SQL:查询的SQL语句
       Msg:返回的消息,包括错误消息
 
       出口参数:
       int :0表示成功;1表示失败
       */
       int UpdateData(char * SQL,char * Msg);

	   /*
	   主要功能:
	   调用数据库存储过程
	   */

	   int CallProcedure(char * SQL,char * Msg);


	 
 
       /*
       主要功能:
       删除数据
      
       入口参数
       SQL:查询的SQL语句
       Msg:返回的消息,包括错误消息
 
       出口参数:
       int :0表示成功;1表示失败
       */
       int DeleteData(char * SQL,char * Msg);
      
       /*
       主要功能:
       关闭数据库连接
       */
       void CloseMySQLConn();

	   
	  
 
};
 

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

//#include "stdafx.h"
#include "DBMySQL.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, charset) != 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 rg='\r';
	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 += cg;
		}
		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::ReplaceData(char * SQL,char * Msg)
{
	char sql[2048];
	sprintf(sql,SQL);
	if(mysql_query(&mysql,sql) != 0)
	{
		Msg = "Replace 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;
}

//调用数据库存储过程
int VspdCToMySQL::CallProcedure(char * SQL,char * Msg)
{
	char sql[2048];
	sprintf(sql,SQL);
	if(mysql_query(&mysql,sql) != 0)
	{
		Msg = "Call Procedure error";
		return 1;
	}
	return 0;
}
//关闭数据库连接
void VspdCToMySQL::CloseMySQLConn()
{
	mysql_close(&mysql);
	printf("断开数据库\n");
}




6、 在main函数,(如果是其他工程级不是main了,可能是一个按钮里面的代码块)添加      一些代码,添加之后如下:
#include "stdafx.h"
#include "DBMySQL.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;
}





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值