文章目录
mfc对MySQL的操作
配置环境
需要的MySQL配置文件
- lib: libmysql.h文件
- dll: libmysql.dll文件
设置字符集为多字节
在vs中配置环境
在vs中配置包含目录、引用目录、库目录和附加依赖项
包含路径:C:\Program Files\MySQL\MySQL Server 8.0\include
引用路径:C:\Program Files\MySQL\MySQL Server 8.0\lib
库目录:C:\Program Files\MySQL\MySQL Server 8.0\lib
添加依赖项
添加头文件
#include <mysql.h>
对数据库的操作
初始化数据库
// 初始化MySQL数据库,若数据库中不存在UserInfo表,则建立
void CDialogTest::MySQL_DataBaseInit()
{
MYSQL m_sqlCon;
// 初始化数据库对象
mysql_init(&m_sqlCon);
// localhost:服务器地址,可以直接填入IP;
// root:账号;
// PassWord:密码;
// DialogTest:数据库名;
// 3306:网络端口
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "PassWord", "DialogTest", 3306, NULL, 0))
{
AfxMessageBox(_T("数据库连接失败!"));
mysql_close(&m_sqlCon);
return;
}
else // MySQL连接成功则继续访问数据库
{
AfxMessageBox(_T("数据库连接成功!"));
mysql_set_character_set(&m_sqlCon, "gb2312"); //设置字节符,防止中文乱码.
CString sql_create_table = "CREATE TABLE IF NOT EXISTS UserInfo(\
id INT PRIMARY KEY NOT NULL,\
Account VARCHAR(20) NOT NULL UNIQUE,\
Pass VARCHAR(20) NOT NULL\
);\
";
int result = mysql_query(&m_sqlCon, sql_create_table1.GetBuffer()); // 执行查询语句
sql_create_table1.ReleaseBuffer();
if (result1 != 0)
{
AfxMessageBox(_T("建表失败!"));
mysql_close(&m_sqlCon);
return;
}
//AfxMessageBox(_T("数据库中有表"));
mysql_close(&m_sqlCon); // 关闭数据库
}
}
数据库增删改查
查询操作
在MySQL
中查询数据,并将查询的结果显示在List Control
中。
bool CDialogTest::MySQL_SelectData(char* sql_select)
{
// 查询操作之前先清空list control中的所有内容
m_List.DeleteAllItems(); //清空所有表项
MYSQL m_sqlCon;
// 初始化数据库对象
mysql_init(&m_sqlCon);
// localhost:服务器地址,可以直接填入IP;
// root:账号;
// PassWord:密码;
// DialogTest:数据库名;
// 3306:网络端口
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "PassWord", "DialogTest", 3306, NULL, 0))
{
AfxMessageBox(_T("数据库连接失败!"));
mysql_close(&m_sqlCon);
return FALSE;
}
else // MySQL连接成功则继续访问数据库
{
//AfxMessageBox(_T("数据库连接成功!"));
MYSQL_RES* res; // 声明数据查询结果
MYSQL_ROW row; // 取每行结果的对象
mysql_real_query(&m_sqlCon, sql_select, strlen(sql_select)); // 查询函数,语句用字符串表示
res = mysql_store_result(&m_sqlCon); // 得到查询结果
//重复读取行,把数据放入列表中,直到row为NULL
//
int selectCount = 0; // 记录查询结果的个数,若查询结果为空,也返回0
while (row = mysql_fetch_row(res))
{
/*CString strData(row[0]);
MessageBox(strData);*/
CString strId, strAccount, strPass;
strId = row[0];
strAccount = row[1];
strPass = row[2];
// 在list control中插入数据
m_List.InsertItem(selectCount, strId);
m_List.SetItemText(selectCount, 1, strAccount);
m_List.SetItemText(selectCount, 2, strPass);
selectCount++;
}
mysql_close(&m_sqlCon);
if (selectCount == 0) return FALSE; // 没查询到数据
else return TRUE;
}
}
插入操作
在MySQL
数据中插入数据。
// MySQL插入数据
BOOL CDialogTest::MySQL_InsertData(char* sql_insert)
{
MYSQL m_sqlCon;
// 初始化数据库对象
mysql_init(&m_sqlCon);
// localhost:服务器地址,可以直接填入IP;
// root:账号;
// PassWord:密码;
// DialogTest:数据库名;
// 3306:网络端口
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "PassWord", "DialogTest", 3306, NULL, 0))
{
AfxMessageBox(_T("数据库连接失败!"));
mysql_close(&m_sqlCon);
return FALSE;
}
else // MySQL连接成功则继续访问数据库
{
//AfxMessageBox(_T("数据库连接成功!"));
if (mysql_query(&m_sqlCon, sql_insert))
{
AfxMessageBox(_T("Operation failed!"));
return FALSE;
}
return TRUE; // 插入成功
}
}
删除操作
void CDialogTest::MySQL_DeleteData(char* sql_delete)
{
MySQL_InsertData(sql_delete);
}
更新数据
void CDialogTest::MySQL_UpdateData(char* sql_update)
{
MySQL_InsertData(sql_update);
}