C++操作Mysql数据库 连接
//连接数据库
BOOL CMySqlDB::StartConnection() { try { if ((m_mysqlDB = mysql_init(nullptr)) == nullptr) { return FALSE; } if (m_mysqlDB == nullptr) { return FALSE; } if(0 != mysql_options(m_mysqlDB, MYSQL_SET_CHARSET_NAME, "gb2312")) //设置额外的连接选项,并影响连接的行为 { return FALSE; } if (mysql_real_connect(m_mysqlDB,m_Host,m_User,m_LoginSec,m_DBName,m_Port,NULL,0)) { //ASSERT(AfxMessageBox(_T("欢迎进入数据库!"))); } else { ASSERT(AfxMessageBox(_T("无法连接数据库!请检查mySQL Server是否已启动!"))); return FALSE; } return TRUE; } catch(_com_error e) { MessageBox(::AfxGetMainWnd()->m_hWnd,e.Description(),_T("数据库连接失败!"),MB_OKCANCEL|MB_ICONEXCLAMATION); return FALSE; } }
停止数据库连接
void CMySqlDB::StopConnection() { mysql_close(m_mysqlDB); m_mysqlDB = nullptr; }
数据库操作--查询
//数据库的连接为短连接 BOOL CMySqlDB::Query(CString &info) { try { if (m_mysqlDB == nullptr && !StartConnection()) return FALSE; CStringA sqlt(info.GetBuffer(info.GetLength())); info.ReleaseBuffer(); sqlt += _T("\0"); const char*sqlstr = sqlt.GetBuffer(); sqlt.ReleaseBuffer(); if (mysql_real_query(m_mysqlDB, sqlstr, static_cast<unsigned long>(strlen(sqlstr)))) { string s(mysql_error(m_mysqlDB)); return FALSE; } return TRUE; } catch(_com_error e) { MessageBox(::AfxGetMainWnd()->m_hWnd,e.Description(),_T("数据库操作错误"),MB_ICONERROR); return FALSE; } }
获取操作错误
CString CMySqlDB::GetError() { return CString(mysql_error(m_mysqlDB)); }
获取数据库DB
MYSQL* CMySqlDB::GetMYSQL() { return m_mysqlDB; }
判断数据库是否存在
//这里得到的是表是否为空的判断结果 BOOL CMySqlDB::IsExisted(CString &info) { if (Query(info)) //先查询,再检查结果 { MYSQL_RES *result = mysql_store_result(m_mysqlDB); if (result) { unsigned long long row = result->row_count; if (row) { mysql_free_result(result); return TRUE; } } mysql_free_result(result); return FALSE; } else return FALSE; }