今天在学习Swift操作数据的时候突然想到原来写采集CSDN数据时用到数据库。想想C++操作数据库也是值得纪录的。在操作类之前,要用到一个.lib库。我先上传。
libmysql.lib项目中设置好这个lib库就 行了,然后下面是简单的操作代码:
头文件
#pragma once
#include
#include
#pragma comment(lib,"libmysql.lib")
using namespace std;
class CMysqlHelper
{
public:
bool m_connected;
MYSQL m_mysql;
MYSQL_RES *m_res;
MYSQL_ROW m_row;
MYSQL_FIELD *m_fd;
CMysqlHelper(void);
~CMysqlHelper(void);
bool init(char* _host,char* _base,char* _user,char* _pwd);
void query(char* sql,vector &_result);
void insert(char* sql);
bool excute(char* sql);
static CMysqlHelper* getInstance();
private:
static CMysqlHelper* pHelper;
public:
void close(void);
bool isConnected(void);
};
源码:
#include "StdAfx.h"
#include "MysqlHelper.h"
CMysqlHelper* CMysqlHelper::pHelper = NULL;
CMysqlHelper::CMysqlHelper(void)
{
m_connected = false;
}
CMysqlHelper::~CMysqlHelper(void)
{
if(m_connected)
mysql_close(&m_mysql);
m_connected = false;
}
bool CMysqlHelper::init(char* _host,char* _base,char* _user,char* _pwd)
{
mysql_init(&m_mysql);
if (!mysql_real_connect(&m_mysql,_host,_user,_pwd,_base,3306,NULL,0))
{
mysql_errno(&m_mysql);//¡¨Ω”≥ˆ¥Ì
const char* error = mysql_error(&m_mysql);
AfxMessageBox(error);
return false;
}
else
{
m_connected = true;
//…Ë÷√±‡¬Î∏Ò Ω,∑Ò‘Ú‘⁄cmdœ¬Œfi∑®œ‘ æ÷–Œƒ
mysql_query(&m_mysql,"SET NAMES GBK");
return true;
}
}
void CMysqlHelper::query(char* sql,vector &_result)
{
if (!excute(sql))
{
AfxMessageBox("≤È—Ø ß∞‹");
return;
}
m_res = mysql_store_result(&m_mysql);//±£¥Ê≤È—ØµΩµƒ ˝æ›µΩresult
if (m_res != NULL)
{
//TRACE("\n\n");
//while((m_fd = mysql_fetch_field(m_res)))
// TRACE("%s ",m_fd->name);//¡–÷µ
//TRACE("\n");
int nColumn = mysql_num_fields(m_res);//»°À˘”–µƒ¡–
while((m_row = mysql_fetch_row(m_res)))
{
CStringArray* arrays = new CStringArray;
int nIndex = 0;
while(nIndex < nColumn)
{
arrays->Add(CString(m_row[nIndex]));
//TRACE("%s ",m_row[nIndex]);
nIndex++;
}
_result.push_back(arrays);
}
}
mysql_free_result(m_res);
}
void CMysqlHelper::insert(char* sql)
{
if (!excute(sql))
{
AfxMessageBox("–¥»Î ß∞‹");
return;
}
}
bool CMysqlHelper::excute(char* sql)
{
if(!m_connected)
{
AfxMessageBox(" ˝æ›ø‚Œ¥≥ı ºªØ!");
return false;
}
bool _ok = mysql_query(&m_mysql,sql) == 0;
if(!_ok)
{
const char* _error = mysql_error(&m_mysql);
GT_WriteReleaseLog("----------¥ÌŒÛ»’÷æ----------");
GT_WriteReleaseLog(_error);
}
return _ok;
}
CMysqlHelper* CMysqlHelper::getInstance()
{
if(pHelper == NULL)
pHelper = new CMysqlHelper;
return pHelper;
}
void CMysqlHelper::close(void)
{
if(pHelper != NULL)
delete pHelper;
pHelper = NULL;
}
bool CMysqlHelper::isConnected(void)
{
return this->m_connected;
}
mysql.h还有这个头文件,是MYSQL的。不然好多类似不能识别。这个头文件加入到工程编译就能正常通过了。
我在这里放出一个完成的采集CSDN的项目源码:
ItHtw_NEW本文链接:http://it72.com/7930.htm