头文件://libmysql.lib 和libmysql.dll 拷贝到代码目录下,也可以在VC里面设置路径
#ifndef _MYSQL_OBJECT_H
#define _MYSQL_OBJECT_H
#include <stdio.h>
#include "winsock.h"
#include "mysql.h"
class MySQLObject
{
public:
MySQLObject(char* cUrl, char* cUser, char* cPwd, char* cDB, int iPort);
char* Query_Select(char* cTable, char* cSelDate, char* cEx);
virtual ~MySQLObject()
{
mysql_free_result(m_Res);
mysql_close(m_Sock);
}
private:
MYSQL m_Mysql;
MYSQL* m_Sock; //定义数据库连接的句柄,它被用于几乎所有的MySQL函数
MYSQL_RES * m_Res; //查询结果集,结构类型
};
#endif
函数定义部分:
#include “mysqlobject.h”
#define STR_LEN 256
#define FREE_OBJECT(Object)\
{\
if (NULL != Object)\
{\
free(Object);\
Object = NULL; \
}\
}\
MySQLObject::MySQLObject(char* cUrl, char* cUser, char* cPwd, char* cDB, int iPort)
{
mysql_init(&m_Mysql);
m_Sock = mysql_real_connect(&m_Mysql, cUrl, cUser, cPwd, cDB, iPort, NULL, 0);
if (NULL == m_Sock)
{
printf("Couldn't connect to the %s! The error is %s\n", cDB, mysql_error(&m_Mysql));
//system("pause");
exit(1);
}
}
//select cSelDate from cTable cEx的方式,这个函数是查询出一个字段值返回,如果需要所有的数据段,需要更改返回值
char* MySQLObject::Query_Select(char* cTable, char* cSelDate, char* cEx)
{
if (NULL == cTable || NULL == cSelStr)
{
printf("Your puts is error!\n");
exit(1);
}
char* cTmp = (char*)malloc(sizeof(char) * STR_LEN);
memser(cTmp, 0, STR_LEN);
if (NULL == cEx)
{
sprintf(cTmp, "select %s from %s", cSelDate, cTable);
}
else
{
sprintf(cTmp, "select %s from %s %s", cSelDate, cTable, cEx);
}
if (mysql_query(m_Sock, cTmp))
{
printf("Query failed %s\n", mysql_error(m_Sock));
FREE_OBJECT(cTmp);
exit(1);
}
FREE_OBJECT(cTmp);
if (! (m_Res = mysql_store_result(m_Sock)))
{
printf("Couldn't get result from %s\n", mysql_error(m_Sock));
exit(1);
}
int iRes = mysql_num_fields(m_Res);
if (1 != iRes)
{
printf("The result is not only one, please check your puts!\n");
exit(1);
}
MYSQL_ROW Row;
Row = mysql_fetch_row(m_Res);
return Row[0];
}