社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
这里介绍如何连接MySQL数据库,使用的是MySQLworkbench6.3版本,其他版本也可以,安装过程百度
1、表定义
这里使用的是vs2008版本,建议2010版本,用visualC++也可以,根据情况导入。
界面:
自定义了一个CDatabase类,实现数据库操作的封装。
mysql.h等数据库文件见源代码。
#include "StdAfx.h"
#include "MFCDlg.h"
#include <cstring>
#include <string>
#include "CDatabase.h"
// 构造函数初始化MYSQL对象
CDatabase::CDatabase()
{
mysql_init(&mysql);
}
// 析构函数
CDatabase::~CDatabase()
{
Close();
mysql_library_end();
}
// 关闭数据库连接
void CDatabase::Close()
{
if(query) mysql_free_result(query);
mysql_close(&mysql);
}
// 打开数据库
bool CDatabase::Open(char* host, char* user, char* pass, char* db)
{
CString error;
if(!mysql_real_connect(&mysql, host, user, pass, db, 3306, NULL, 0))
{
error = mysql_error(&mysql);
AfxMessageBox(error);
//printf("执行查询操作失败。错误原因: %sn", mysql_error(&mysql));
return false;
}
return true;
}
//选择记录
bool CDatabase::Execute(char* sql)
{
if(mysql_real_query(&mysql, sql, strlen(sql))) return false;
query = mysql_use_result(&mysql);
return true;
}
//设置编码
void CDatabase::SetCode()
{
//mysql_set_character_set(&mysql, "utf8");
AfxMessageBox("成功");
}
//获取字段个数
int CDatabase::GetFieldNum()
{
if (query) return mysql_num_fields(query);
return 0;
}
//获取记录行
MYSQL_ROW CDatabase::GetRecord()
{
if (query)
{
row = mysql_fetch_row(query);
return row;
}
return NULL;
}
// 获取记录集
void CDatabase::GetRecords()
{
query = mysql_use_result(&mysql);
}
// 获取记录集字段值的长度
unsigned long * CDatabase::GetRecordFieldLength()
{
if (query) return mysql_fetch_lengths(query);
return NULL;
}
// 显示查询结果集
bool CDatabase::ShowRecords(char* sql)
{
// 执行查询操作
if (!Execute(sql)) return FALSE;
unsigned int nFields = GetFieldNum();
CEdit* pWnd = (CEdit*)AfxGetApp()->m_pMainWnd->GetDlgItem(IDC_EDIT1);
while ((row = GetRecord()))
{
unsigned long *lengths;
lengths = GetRecordFieldLength();
for(UINT i = 0; i < nFields; i++)
{
//printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
char *s = new char[200];
sprintf(s,"%.*s ", (int) lengths[i], row[i] ? row[i] : "NULL");
//CMFCDlg myDialog = new CMFCDlg();
//((CEdit*)myDialog.GetDlgItem(IDC_EDIT1))->SetWindowText(_T("xxxx"));
//myDialog->SetWindowText("123")
int nLength=pWnd->SendMessage(WM_GETTEXTLENGTH);
pWnd->SetSel(nLength, nLength);
pWnd->ReplaceSel(s);
/*m.setedit(s);*/
}
//printf("n");
}
//printf("--------------------------------------------------n");
return TRUE;
}
源码链接
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!