MYSQL_MANAGER.h
/*
Author : newsoul
E-mail : 1939124823@qq
Date  : 2013.04.13
调用mysql官方 c API 的封装.
头文件 mysql.h 在你的 mysql安装目录
例如我的 C:\Program Files\MySQL\MySQL Server 5.6\include
Linux下有待详查.
Linux下的编译参数要指定 -I 和 -L  (I代表include ,L代表lib)
需要 libmysql.lib , libmysql.dll 在工程目录下或者导入工程
C:\Program Files\MySQL\MySQL Server 5.6\lib
如果在你的mysql安装目录 没有这些文件夹/文件,说明你安装的时候没有选择完整安装.
.lib .dll还有include目录随便哪里下载/拷贝都可以.
使用了 STL map, vector , 来保存结果集.
由于 vc6.0 对STL支持有些问题,  所以vc6.0的朋友可能会遇到编译不通过.
如果遇到了编译不过这种情况, 尝试修改:
map<int,vector<string>> 改为 map<int,vector<string > >  ---- 注意空格
vector<string> 改为 vector<string > ---- 注意空格
高手绕路,初学参考.
使用方法参考 main() 函数
更详细的API查询官方文档
*/
#ifndef MYSQL_MANAGER_H
#define MYSQL_MANAGER_H
#include <Winsock2.h>
#include "mysql_include/mysql.h"
#include <string>
#include <vector>
#include <map>
using namespace std;
#pragma comment(lib,"libmysql.lib")
class mysql_db
{
public:
mysql_db();
~mysql_db();
public:
/*
mysql_open()
return : 1 OK
-1 失败 
*/
int mysql_open(const char * host, const char * user, const char * password, const char * database, unsigned int port );
/*
mysql_noResult_query();
非select语句查询
return >0 成功, 为受影响的行数
-1 失败
*/
int mysql_noResult_query(const char * sql );
/*
mysql_select_query();
有结果集的查询
return >0 ok 返回结果集条数
-
1 失败
map_results first = 行 second = values
*/
int mysql_select_query(const char * sql, map<int,vector<string>> & map_results);
/*
mysql_select_SingleLine_query();
只有一条数据 , 或者只有一个字段 N 条的查询. 直接调用vector即可
*/
int mysql_select_SingleLine_query(const char * sql, vector<string> & v_results);
/*
mysql_lasterror();
返回最近一次错误信息
*/
string mysql_lasterror();
private:
MYSQL sqlCon;
MYSQL_RES *m_pResult;
MYSQL_ROW  m_Row;
};
#endif
end of .h----------------------------------
MYSQL_MANAGER.cpp
/
/#include "stdafx.h"
#include "MYSQL_MANAGER.h"
mysql_db::mysql_db()
{
mysql_init(&sqlCon);// mysql 初始化
}
mysql_db::~mysql_db()
{
mysql_close(&sqlCon);// 关闭连接
}
int mysql_db::mysql_open(const char * host, const char * user, const char * password, const char * database, unsigned int port)
{
char nvalue = 1;
mysql_options(&sqlCon,MYSQL_OPT_RECONNECT,(char *)&nvalue);// 断线自动重连
mysql_options(&sqlCon, MYSQL_SET_CHARSET_NAME, "gbk");// set name gbk 中文乱码问题
if (!m
ysql_real_connect(&sqlCon, host, user, password, database, port, NULL, 0))
return -1;
return 1;
}
int mysql_db::mysql_noResult_query(const char * sql)
{
if (mysql_query(&sqlCon, sql) != 0)
return -1;
return (int)mysql_affected_rows(&sqlCon);
}
int mysql_db::mysql_select_query(const char * sql, map<int,vector<string>> & map_results)
{
if (mysql_query(&sqlCon, sql) != 0)
return -1;
if(!(m_pResult = mysql_use_result(&sqlCon)))
return -1;
int i = 0;
int count = mysql_num_fields(m_pResult);
while(m_Row = mysql_fetch_row(m_pResult))
{
vector<string> vVal;
for (int j=0;j<count;j++)
vVal.push_back(m_Row[j]);
map_results[i++] = vVal;
mysql操作官方文档
}
mysql_free_result(m_pResult);
return i;
}
int mysql_db::mysql_select_SingleLine_query(const char * sql, vector<string> & v_results)
{
if (mysql_query(&sqlCon, sql) != 0)
return -1;
if(!(m_pResult = mysql_use_result(&sqlCon)))
return -1;
int i = 0;
int count = mysql_num_fields(m_pResult);
while(m_Row = mysql_fetch_row(m_pResult))
{
for (int j=0;j<count;j++)
v_results.push_back(m_Row[j]);
}
mysql_free_result(m_pResult);
return i;
}
string mysql_db::mysql_lasterror()
{
return mysql_error(&sqlCon);
}
end of .cpp-------------------------------------
#include <iostream>
#include "MYSQL_MANAGER.h"
using namespace std;
#define MY_SERVER "127.0.0.1"
#define MY_USER "root"
#define MY_PASSWORD "newsoul"
#define MY_DATABASE ""
#define MY_PORT 3306
int main()
{
mysql_db mydb;
//打开.. 连接
if (-1 == sql_open(MY_SERVER, MY_USER, MY_PASSWORD, MY_DATABASE, MYSQL_PORT))
cout << sql_lasterror() << endl;
//创建一个库
string sql = "create database if not exists database_test";
if ( -1 == sql_noResult_query(sql.c_str()))
cout << sql_lasterror() << endl;
//use 库
sql = "use database_test";
if ( -1 == sql_noResult_query(sql.c_str()))
cout << sql_lasterror() << endl;
//创建一张表
sql = "create table if not exists table_test(id int not null auto_increment, name varchar(20) not null, age int not null ,primary key (id) )";
if ( -1 == sql_noResult_query(sql.c_str()))
cout << sql_lasterror() << endl;
//插入2条数据
sql = "insert into table_test (name,age) values('newsoul','25')";
if ( -1 == sql_noResult_query(sql.c_str()))
cout << sql_lasterror() << endl;
sql = "insert into table_test (name,age) values('百度','100')";
if ( -1 == sql_noResult_query(sql.c_str()))
cout << sql_lasterror() << endl;
//mysql_select_SingleLine_query 演示
sql = "select * from table_test where id=1 ";
vector<string> vResults;
if (-1 == sql_select_SingleLine_query(sql.c_str(),vResults))
cout << sql_lasterror() << endl;
//遍历结果集
cout << "select * from table_test where id=1的结果: " << endl;
for (vector<string>::iterator it = vResu
lts.begin(); it != d(); it++)
cout << (*it) << endl;
cout << endl << endl;
//mysql_select_query 演示
sql = "select * from table_test";
map<int,vector<string>> map_res;
if (-1 == sql_select_query(sql.c_str(),map_res))
cout << sql_lasterror() << endl;
//遍历...
cout << "select * from table_test的结果:" << endl;
for (map<int,vector<string>>::iterator it = map_res.begin(); it != d(); it++)
{
cout << "第" << it->first+1<< "条 : ";
for (int i=0;i<it->second.size();i++)
{
cout << it->second[i] << "\t";
}
cout << endl;
}
system("pause");
return 1;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。