淄博建站哪家好,wap网站制作怎么做,一家公司为什么要建官方网站,ppt免费模板官网根据我的以前的文章 http://blog.csdn.net/skyhuangdan/article/details/21099929 链接数据库成功后进行封装。我封装类使用的是VS2005下的win32控制台应用程序编写#xff0c;预编译头文件了的。所以要在 stdafx.h 里面加入 #xff1a;#include CMySQL.h现在代…根据我的以前的文章 http://blog.csdn.net/skyhuangdan/article/details/21099929 链接数据库成功后进行封装。我封装类使用的是VS2005下的win32控制台应用程序编写预编译头文件了的。所以要在 stdafx.h 里面加入 #include CMySQL.h现在代码奉上main函数代码mysql2.cpp// mysql2.cpp : 定义控制台应用程序的入口点。//#include stdafx.hint main(){CMySQL mysql;int re mysql.Connect(localhost, root, 123456);mysql.ReConnect();char buffer[1024] {0};while(1){memset(buffer, 0, 1024);printf(please input cmd:\n);if( strcmp( quit, gets(buffer)) ! 0 ){if( (char) 1 buffer[0] ){mysql.SelectQuery(buffer1);}else{mysql.ModifyQuery(buffer1);printf(Modify\n);}}elsebreak;}getchar();}CMySQL.h#pragma once#include #include #include #include using namespace std;/*#define ERRMSG1(fmt,...) ; sprintf(m_szErrMsg, fmt, __VA_ARGS__);#define ERRMSG2(fmt,args...) ; sprintf(m_szErrMsg, [%s 第 %d 行 ]; fmt\r\n , __FILE__, __LINE__, ##args);*/class CMySQL{public:CMySQL(void);public:~CMySQL(void);public:bool m_bConnected; //数据库连接了吗? true--已经连接; false--还没有连接char m_szErrMsg[1024]; //函数出错后, 错误信息放在此处int m_iFields; //字段个数MYSQL m_connection; //连接MYSQL_RES* m_result; //结果集指针MYSQL_ROW m_row; //一行, typedef char **MYSQL_ROW;private:string m_sDbIp; //数据库服务器IPstring m_sUser; //用户名string m_sPassword; //口令public:int Connect(const char* szDbIp, const char* szUser, const char* szPassword);//关闭连接无论之前是否已经连接使用这个函数都不会有问题void CloseConnect();//判断是否连接bool IsConnected();//连接标志void SetConnected(bool bTrueFalse );//重新连接int ReConnect();//用于执行查询命令并且把查询到的结果集保存到m_result结果集里面//!!此函数调用SelectPrint()函数int SelectQuery(const char* szSQL);//只是执行SQL命令int ModifyQuery(const char* szSQL);//返回错误信息const char* GetErrMsg();//保存连接参数void SaveParam(const char* szDbIp, const char* szUser, const char* szPassword);//释放上次的结果void FreePreResult();//显示结果void PrintSelect();};CMySQL.cpp#include StdAfx.h#include CMySQL.hCMySQL::CMySQL(void){SetConnected(false);//把结果集置空m_result NULL;//初始化连接mysql_init(m_connection);}CMySQL::~CMySQL(void){//释放上一次的结果集FreePreResult();//关闭数据库连接CloseConnect();}int CMySQL::Connect(const char* szDbIp, const char* szUser, const char* szPassword){SaveParam(szDbIp, szUser, szPassword);//先判断释放已连接防止重复连接if (IsConnected())return 0;//连接数据库if (mysql_real_connect( m_connection, szDbIp, szUser, szPassword, NULL, 0,NULL, 0) NULL){sprintf(m_szErrMsg,%s ,mysql_error(m_connection));return -1;}printf([mysql] conn to %s [user:%s] succ!\r\n, szDbIp, szUser);//设置连接标志为 trueSetConnected(true);return 0;}void CMySQL::CloseConnect(){//不论m_connection曾经是否连接过 这样关闭都不会有问题mysql_close(m_connection);SetConnected(false);}bool CMySQL::IsConnected() {return m_bConnected;}void CMySQL::SetConnected(bool bTrueFalse){m_bConnected bTrueFalse;}void CMySQL::FreePreResult(){if (m_result ! NULL){mysql_free_result(m_result);m_result NULL;}}int CMySQL::SelectQuery(const char* szSQL){//如果查询串是空指针,则返回if (szSQL NULL) {sprintf(m_szErrMsg,%s, szSQLNULL);return -1;}//如果还没有连接,则返回if (!IsConnected()) {sprintf(m_szErrMsg,%s , 还没有建立连接);return -2;}try //这些语句与连接有关出异常时就重连{//查询if (mysql_real_query(m_connection, szSQL, strlen(szSQL)) ! 0){sprintf(m_szErrMsg,%s , mysql_error(m_connection));printf(%s, mysql_error(m_connection));printf(ReConnect() is called, select111 !!!***\r\n);int nRet ReConnect();if (nRet ! 0)return -3;//if (mysql_real_query(m_connection, szSQL, strlen(szSQL)) ! 0)return -33;//}//释放上一次的结果集FreePreResult();//取结果集m_result mysql_store_result(m_connection);if (m_result NULL) {sprintf(m_szErrMsg,%s , mysql_error(m_connection));return -4;}} catch (...) {printf(ReConnect() is called, select !!!***!\r\n);ReConnect();return -5;}//取字段的个数m_iFields mysql_num_fields(m_result);//查询完过后进行打印出来this-PrintSelect();return 0;}int CMySQL::ReConnect() {CloseConnect();//连接数据库SetConnected(false);//把结果集置空m_result NULL;//初始化连接mysql_init(m_connection);if (mysql_real_connect(m_connection, m_sDbIp.c_str(), m_sUser.c_str(),m_sPassword.c_str(), NULL, 0, NULL, 0) NULL){sprintf(m_szErrMsg,%s , mysql_error(m_connection));return -1;}//设置连接标志为 trueSetConnected(true);return 0;}const char* CMySQL::GetErrMsg() {return m_szErrMsg;}void CMySQL::SaveParam(const char* szDbIp, const char* szUser,const char* szPassword) {m_sDbIp szDbIp; //数据库服务器IPm_sUser szUser; //用户名m_sPassword szPassword; //口令}void CMySQL::PrintSelect(){printf(\n------------------------------------------------\n);int num_fields mysql_num_fields(m_result);while ( m_row mysql_fetch_row( m_result) ){for( int i 0; i num_fields; i ){if(m_row[i])printf(%s , m_row[i]);elseprintf(NULL);}printf(\n);}printf(\n------------------------------------------------\n);}int CMySQL::ModifyQuery(const char* szSQL) {//如果查询串是空指针,则返回if (szSQL NULL) {sprintf(m_szErrMsg,%s, szSQLNULL);return -1;}//如果还没有连接,则返回if (!IsConnected()) {sprintf(m_szErrMsg,%s, 还没有建立连接);return -2;}try //这些语句与连接有关出异常时就重连{//查询, 实际上开始真正地修改数据库if (mysql_real_query(m_connection, szSQL, strlen(szSQL)) ! 0) {sprintf(m_szErrMsg,%s, mysql_error(m_connection));return -3;}} catch (...) {printf(ReConnect() is called ,modify!!!***\r\n);ReConnect();return -5;}return 0;}注对于输入的MySQL命令错误的情况下程序会连接一遍在程序关闭过后用于连接的关键字【MYSQL m_connection; 】必须要初始化否则程序会出错。还有重连过后必须重新USE XXXXX; 因为重新连接那里并没有自动连接你之前USE过的数据库。