当前位置:首页 » 数据仓库 » mfc访问mysql数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

mfc访问mysql数据库

发布时间: 2022-11-26 16:27:25

1. c++(或MFC)使用mysql数据库具体该掌握哪些东西,具体怎么弄

首先,应该熟悉基本的sql语句,至少包括数据库的创建,建表以及表的增、删、改、查。这是操作所有数据库的根本。

然后,因为具体的数据库有其自身的特性,你使用的是MySQL,那么你需要了解MySQL里面那些相应操作的具体语句。我的建议是,先安装好MySQL,在命令行登录连接数据库,然后在命令行中练习,直到对数据库的基本操作(特别是表的增删改查)都很熟练。至于MySQL的可视化界面,那只是为了方便这些操作的。如果你只是弄一个小程序,可以不用可视化界面。

之后,应该学习如何在程序中操作数据库。这个我想和MFC还是C++没有太大的关系。程序中使用数据库大体上可以分为以下几步:

  1. 加载驱动

  2. 建立数据库的连接

  3. 通过上面的连接获取语句对象

  4. 通过语句对象执行具体的sql语句,获取并处理结果集

  5. 关闭连接

这每一步都有一些小的知识点,需要你自己去学习。比如加载驱动可能涉及驱动包,建立连接需要知道程序中连接MySQL的url写法以及用户名密码,获取语句对象分statement和preparestatement,执行sql语句分查询和更新两类,关闭连接要有先后等等。这些网上应该都能查到资料,而且操作的步骤都是死的,所以只要会了还是不难。我的建议是,先自己写个小程序,然后实现在这个程序里面对数据库进行操作,只要能够在这个程序里对数据库进行查询了,那么这个流程你也就熟悉了,那些复杂的操作也就不难实现了。

另外,在程序中操作数据库和在命令行中操作数据库相差不大,所以练习好在命令行中使用数据库很重要。

2. 关于MFC连接MySQL数据库的问题

我也遇到了,不知道为啥

3. 如何用MFC从MYSQL中读取数据

//下面的代码是一个实现C++连接MYSQL数据库的很好的例子
//这里用了建表,插入,检索,删表等常用功能
//我用VC++6.0生成,已经成功连接了。
//在VC++6.0中要想把做一下两步准备工作才可以。
//(1)Tools->Options->Directories->Include files中添加C:\Program Files\MySQL\MySQL Server 6.0\include
//(2)Tools->Options->Directories->Library files中添加C:\Program Files\MySQL\MySQL Server 6.0\lib\opt
//其实就是将头文件和库文件包含进来
//我觉得这个例子写的很好,再结合自己的试验,特地介绍给大家!

#include <winsock.h>
#include <iostream>
#include <string>
#include <mysql.h>
using namespace std;

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libmysql.lib")

//单步执行,不想单步执行就注释掉
#define STEPBYSTEP

int main() {
cout << "****************************************" << endl;

#ifdef STEPBYSTEP
system("pause");
#endif

//必备的一个数据结构
MYSQL mydata;

//初始化数据库
if (0 == mysql_library_init(0, NULL, NULL)) {
cout << "mysql_library_init() succeed" << endl;
} else {
cout << "mysql_library_init() failed" << endl;
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//初始化数据结构
if (NULL != mysql_init(&mydata)) {
cout << "mysql_init() succeed" << endl;
} else {
cout << "mysql_init() failed" << endl;
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//在连接数据库之前,设置额外的连接选项
//可以设置的选项很多,这里设置字符集,否则无法处理中文
if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk")) {
cout << "mysql_options() succeed" << endl;
} else {
cout << "mysql_options() failed" << endl;
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//连接数据库
if (NULL
!= mysql_real_connect(&mydata, "localhost", "root", "test", "test",
3306, NULL, 0))
//这里的地址,用户名,密码,端口可以根据自己本地的情况更改
{
cout << "mysql_real_connect() succeed" << endl;
} else {
cout << "mysql_real_connect() failed" << endl;
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//sql字符串
string sqlstr;

//创建一个表
sqlstr = "CREATE TABLE IF NOT EXISTS user_info";
sqlstr += "(";
sqlstr +=
"user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique User ID',";
sqlstr +=
"user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT 'Name Of User',";
sqlstr +=
"user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'The Summation Of Using Time'";
sqlstr += ");";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() create table succeed" << endl;
} else {
cout << "mysql_query() create table failed" << endl;
mysql_close(&mydata);
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//向表中插入数据
sqlstr =
"INSERT INTO user_info(user_name) VALUES('公司名称'),('一级部门'),('二级部门'),('开发小组'),('姓名');";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() insert data succeed" << endl;
} else {
cout << "mysql_query() insert data failed" << endl;
mysql_close(&mydata);
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//显示刚才插入的数据
sqlstr = "SELECT user_id,user_name,user_second_sum FROM user_info";
MYSQL_RES *result = NULL;
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() select data succeed" << endl;

//一次性取得数据集
result = mysql_store_result(&mydata);
//取得并打印行数
int rowcount = mysql_num_rows(result);
cout << "row count: " << rowcount << endl;

//取得并打印各字段的名称
unsigned int fieldcount = mysql_num_fields(result);
MYSQL_FIELD *field = NULL;
for (unsigned int i = 0; i < fieldcount; i++) {
field = mysql_fetch_field_direct(result, i);
cout << field->name << "\t\t";
}
cout << endl;

//打印各行
MYSQL_ROW row = NULL;
row = mysql_fetch_row(result);
while (NULL != row) {
for (int i = 0; i < fieldcount; i++) {
cout << row[i] << "\t\t";
}
cout << endl;
row = mysql_fetch_row(result);
}

} else {
cout << "mysql_query() select data failed" << endl;
mysql_close(&mydata);
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//删除刚才建的表
sqlstr = "DROP TABLE user_info";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() drop table succeed" << endl;
} else {
cout << "mysql_query() drop table failed" << endl;
mysql_close(&mydata);
return -1;
}
mysql_free_result(result);
mysql_close(&mydata);
mysql_server_end();

system("pause");
return 0;
}

4. mfc链接mysql

一、首先安装mysql:我这里用的版本是mysql-essential-5.1.45-win32.msi。安装时遇到一个小问题在这里说一下:首次安装到最后一步启动服务时卡住了,电脑死机,我强制退出,结果不能正常运行,然后卸载重装,由于第一次设置了密码,即使卸载了文件依然存在,所以第二次安装遇到设置密码时它出现要输入前一次设置的密码,在这里什么都不要输入,不然在最后一步会出错(我重装了好几次,才在上查到是这个问题)。

2
二、VC6.0的设置
(1)打开VC6.0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Show directories for:”下拉列表中选中“Includefiles”,然后在中间列表框中添加你本地安装MySQL的include目录路径。(我的是D:\Program Files\MySQL\MySQL Server 5.0\include)。
(2)在上面说到的“Show directories for:”下拉列表中选中“Library files”,然后添加你本地安装MySQL的Lib目录路径。Lib目录下还有debug和opt两个目录,建议选debug。(我的是D:\Program Files\MySQL\MySQL Server 5.0\lib\debug)。
(3)在“Project settings->Link:Object/library moles”里面添加“libmysql.lib”。
(4)在你要连接数据库的文件里加入#include "winsock.h"和#include "mysql.h"两个文件,这里要注意这两个头文件的顺序不要颠倒,否则会报错(这个问题害我了一个上午)。

3
三、数据库、表的创建
打开“开始->所有程序->MySQL->MySQL Server 5.0->MySQL Command Line Client.exe”,如果没有设置密码就直接按回车,会提示服务器启动成功。
mysql> SHOW DATABASES;//显示所有的数据库,注意一定要 敲“;”后再按回车
mysql> CREATE DATABASE mydb;//创建数据库mydb
mysql> USE mydb;//选择你所创建的数据库mydb
mysql> SHOW TABLES; //显示数据库中的表
mysql> CREATE TABLE mytable (username VARCHAR(50), password VARCHAR(200),);//创建一个表mytable: 用户名;密码
mysql> DESCRIBE mytable;//显示表的结构

4
四、VC编程
MYSQL mysql; //数据库连接句柄
mysql_init (&mysql);
if(!mysql_real_connect(&mysql,"localhost","root","dxd","mydb",3306,NULL,0))
{//mydb为你所创建的数据库,3306为端口号,可自行设定
AfxMessageBox("数据库连接失败");
return FALSE;
}

5
五、通过上述设置、连接即可对数据库操作了。

5. MFC怎么连接MYSQL数据库求详细。。

用ADO连接SQL数据库
步骤如下:
1,在头文件"StdAfx.h"中导入#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","rsEOF"),记住把这句话放到endif的后面,不然会报错,这样处理好之后,编译后又一个警告,可以忽略
2,在对话框的OnInitDialog()函数中写上"::CoInitialize(NULL);::AfxOleInit(); ” 在主程序的初始化函数中,它就可以写一次
3,在对话框类的头文件中,声明如下变量:_ConnectionPtr m_pConnection;_RecordsetPtr pRst;
连接数据库的代码如下:
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");

if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=数据库的驱动器名称;Integrated Security=SSPI;Persist Security Info=False;Data Source=数据库服务器名;Initial Catalog=连接的数据库名; User ID=登陆数据库的名称;Password=登陆数据库的密码;","","",adModeUnknown);
}
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
”数据库的驱动器名称“在控制面板里,以大图标查看,可以看到一个"ODBC",双击打开,在”驱动程序“里面在最下面有两个”SQL Server"和“SQL Native Client"如果你是2000的SQL版本,就选”SQL Server"及“Provider=SQL Server"2005的"Provider=SQL Native Client"Data Source=? ,?的值可以是”localhost"也可以是你的数据库服务器的名称,连接数据库的时候可以看到,复制一下就可以了。
处理完之后就可以连接到你想要连接的数据库上了!你下次给点分把!!!

6. mfc中查询MySQL的数据的代码

MFC程序访问数据库不是那么简单的,需要很多初始化代码,建立ADO连接并使用接口。
网上很多相关完整资料,搜“VC ADO MYSQL”,灰常多。

下面是一个比较精炼的描述:
1、应用程序的stdafx.h头文件中(也可以在其他合适的地方)包含如下语句。

#import "C://program files//common files//system//ado//msado15.dll"
no_namespace rename ("EOF", "adoEOF")

2、链接数据库

CoInitialize(NULL);
//初始化Com组件

_ConnectionPtr
conPtr; //数据库链接指针

//
conPtr.CreateInstance("ADODB.Connection");
//Connection用于与数据库服务器的链接

conPtr.CreateInstance(__uuidof(Connection));
//Connection用于与数据库服务器的链接另一种方式

try

{

conPtr->ConnectionTimeout = 5; //设置连接时间

//
MySqlTest为数据源名 localhost表示本地
root表示用户名 sa表示密码

//链接方式1,使用这种方式链接时要注意在设置数据源时一定要选择一个数据库

//conPtr->Open("DSN=MySqlTest;server=localhost;","root","sa",adModeUnknown);///连接MySql数据库(测试成功)

//链接方式2采用这种方式链接时在创建数据源时没有必要选择一个数据库 conPtr->Open("DSN=MySqlTest;server=localhost;database=test;","root","sa",adModeUnknown);///连接MySql数据库(测试成功)

}

catch(_com_error e) //捕捉异常

{

AfxMessageBox(e.ErrorMessage());

}

CoUninitialize(); //释放com组件//不知是否有必要

3、访问数据库

_RecordsetPtr recordPtr;//数据集指针

recordPtr.CreateInstance(__uuidof(Recordset));

CString
cmdStr=_T("select name,stuno from
student");//student为表名 该表中有两个字段name(字符型)stuno(int型)

try

{

recordPtr->Open(_variant_t(cmdStr),

conPtr.GetInterfacePtr(),

adOpenDynamic,

adLockOptimistic,

adCmdText);

}

catch
(_com_error e)

{

AfxMessageBox(e.Description());

}

while
(!(recordPtr->adoEOF))

{//获取记录

CString
name=(CString)recordPtr->GetCollect(_variant_t("name")).bstrVal;

int
no=recordPtr->GetCollect(_variant_t("stuno")).intVal;

recordPtr->MoveNext();

}

recordPtr->Close();//关闭记录集

recordPtr.Release();//释放空间

conPtr->Close();//关闭连接

conPtr.Release();//释放空间

7. MFC向MySQL数据库写入数据,中文乱码怎么解决

① 首先把MySQL的服务停掉 在运行窗口输入:net stop mysql
② 把服务器和客户端的字符集改成自己想用的字符集:GB2312或是utf8等……
具体操作为:打开mysql安装目录下的myini.tet;
找到default-character-set,将其改为自己想用的字符集:GB2312或是utf8等……,要注意的是这里有两个default-character-set,用ctrl+f定位在文件最前面输入default就会找到,都要改过来;
③ 重启MySQL服务器,在运行窗口输入:net start mysql
④ 最重要的是一点是,到这里我们已经能够解决乱码问题了,可问题是我们依然还会出现乱码问题,这是因为我们现在的表被创建的时候用的是默认的字符集(latin1),所以这时候我们要把表删除,然后重建就可以了!

8. mfc 连接mysql ado和其他的区别

ODBC(Open DataBase Connection)开放式系统互连,是一种数据库访问协议,提供了访问数据库的API接口。基于ODBC的应用程序,对数据库操作不依赖于具体的DBMS,不直接与DBMS打交道,所有数据库操作由对应DBMS的ODBC驱动程序完成,即:系统中不需要安装DBMS系统,如SQL SERVER 2005,但必须有SQL SERVER 2005的ODBC驱动程序,然后在ODBC管理器中注册数据源后,就可以在应用程序中通过ODBC API访问该数据库。
ODBC数据库访问技术只适用于windows系统,因为需要在ODBC驱动程序管理器中进行数据源注册,而只有windows才集成了ODBC驱动程序管理器(“控制面板/管理工具/数据源”)。
ADO(ActiveX Data Object)具有跨系统平台特性,它直接对DBMS数据库进行操作,即系
统中必须有DBMS,但不需要驱动程序,不需要注册数据源,所以具有很好的可移植性。
VC++6中这两种技术所涉及到的MFC类:
MFC ODBC类包括CDatabase类 CRecordSet类 CRecoreView类 CFieldExchange类 CDBException类,具体说明请详见任何一本讲述数据库编程技术的参考书。
ADO是data object,即数据对象的意思,先看一些它包括哪些常用对象:
Command对象 Connection对象 Error对象 RecordSet对象 Field对象 Parameter对象,对应到MFC ADO类,主要有_ConnectionPtr _RecordsetPtr等类。
基于ODBC和ADO的VC++应用程序设计概述
习惯上建立基于文档视图的应用程序时,使用ODBC访问方法,创建应用程序时,需要在step 2 of 6 what database support would you like to include中选择"database view with file support"加载你要访问的数据库,如果在此选择None,后期编程载入数据库相当麻烦,请注意。(如果一个数据库中有多个表,可在此选择一个表进行类定义,默认类名为"工程名+Set",可在应用程序创建完成前最后一步进行改名;然后在编程时建立其他基于CRecordSet的数据库表类)
如果在step 2中设置访问的数据库和表,则在生成的应用程序框架的XXSet类中会自动加载对数据库和表的连接访问操作,当然你最好重新进行定义;系统只有在必要时才会调用GetDefaultConnection和GetDefaultSQL返回缺省的数据库连接定义和SQL语句。
当然也可以建立基于对话框的数据库访问应用程序,思路差不多,请读者自行参悟。
习惯上当建立基于对话框的应用程序时,选择使用ADO技术。对于小程序,在StdAfx.h中引入ADO动态连接库,在C***APP中应初始化COM库环境,创建和关闭ADO连接。对于大型项目,通过自定义的ADOConnection类封装数据库操作的各种接口。

9. C++ MFC连接Mysql数据库 要比较详细一点的步骤 ,网上的都太乱,是不是最开始要下载一个什么驱动

额 你去官网下载一个mysql安装包就可以了 有静态库 不需要什么驱动的
这里有网只 下载安装 然后再加入mysql.lib和mysql.h到vs中 就可以了
http://dev.mysql.com/downloads/mysql/5.0.html#win32