首页 > 代码精文 > C/C++ > C/C++操作数据库实例
2016
03-09

C/C++操作数据库实例

今天在学习Swift操作数据的时候突然想到原来写采集CSDN数据时用到数据库。想想C++操作数据库也是值得纪录的。在操作类之前,要用到一个.lib库。我先上传。

libmysql.lib

项目中设置好这个lib库就 行了,然后下面是简单的操作代码:

头文件

#pragma once

#include <mysql.h>
#include <vector>

#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<CStringArray*> &_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<CStringArray*> &_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

最后编辑:
作者:小企鹅
坚持+积累+学习
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复