以MFC基于对话框为例
一、配置环境
1.打开VC++6.0创建一个MFC基于对话框的项目,打开菜单栏的工具->选项->目录[S]:Include files,添加路径F:\MYSQL\MYSQL-5.6.37-WINX64\INCLUDE
目的:mysql.h文件在这里,不加这个路径就找不到。
2.在F:\MySQL\mysql-5.6.37-winx64\LIB中,找到libmysql.lib和libmysql.dll复制到项目目录下,再将目录下的libmysql.dll剪切到生成的Debug文件中.
3.在工程中的StdAfx.h头文件的顶部加上:
#include "winsock.h"
#include "mysql.h"
#pragma comment(lib,"libmySQL.lib")
4.若编译连接出现"WINDOWS.H"头文件已包含错误的话,就将StdAfx.h中的下面这条语句剪切,黏贴到顶部(即#include"winsock.h"上方).
#include
二、用MySQL C API接口函数mysql_real_connect()连接mysql数据库和一个关闭数据库连接操作
MYSQL mysql;
mysql_init(&mysql);//数据库初始化操作
if(!mysql_real_connect(&mysql,"localhost",user,password,"test0",3306,NULL,0))//连接localhost本地主机IP的user用户,密码为password,数据库名test0,
{ //3306端口,后面2个参数设置默认状态
AfxMessageBox("连接失败!");
}
mysql_close(&mysql);//关闭MySQL连接
三、介绍基本的执行语句操作和数据集保存
mysql_real_query(&MYSQL接口变量,query,(unsigned int)strlen(query));//MYSQL接口变量即为上面的MYSQL mysql;语句的mysql,可理解为连接数据库的"桥梁".下面通用mysql代表
query为执行的SQL语句,这个语句末尾不用带; 只能执行最简单的查询,不能执行一些带有嵌套的语句:
例如:CString query="select * from course";仔细看末尾没有分号';'的!!!最后一个参数是sql语句的大小.
返回值:成功返回0,失败返回1.
mysql_query(&mysql,sql语句);
MYSQL_RES * result;//结果集用于保存返回的中间结果表
result=mysql_store_result (&mysql);//若成功返回结果表则非0,失败返回0
mysql_num_rows(result);//返回结果表的总行数 (我这里只实验过用mysql_query执行出的结果表使用该函数成功返回行数).
这个函数很有用途,例如:你要查看表中是否存在这行数据的时候,直接调用查询语句指定查询到具体的一行,若存在的话,行数返回非0,否则反之.
读取结果表的每一行操作需要的变量和函数:
MYSQL_ROW row;
row变量保存结果表的一行数据,row相当于字符串指针,可用row[0],row[1]...这样表示该行的具体子项!
result=mysql_use_result(&mysql);//这条函数与上面的mysql_store_result获取结果表操作有些许不同,两者的主要区别是,mysql_use_result()的结果必须“一次性用完” ,基本是用来遍历输出表内容的,一定要全遍历完这个表才可执行其他的查询操作,而store恰好相反,是不需要遍历全部的,问题来了:那use这个获取结果表的函数还有什么用途!!要全遍历的话很浪费时间的,但是我还是参照书上的用了use去遍历,自己可试试用store查询出的结果表遍历一下.
得到result后,利用:while(row=mysql_fetch_row(result)){...}遍历全部行
在while里面可写一个for循环将一行的具体子项一一输出到列表控件的地方之类,该行的第一个子项插入列表控件方式是
InsertItem(行索引号,row[0]); 后面的都是SetItemText(行索引号,列索引号,row[列索引号]);行索引号可用i代表,初始化为0,在每一次执行while循环后加1,列索引号是for循环的循环变量...
mysql_affected_rows(&mysql);//这个是返回被处理的行数个数,这里就很有趣了,我在上面说到mysql_num_rows(result)是返回结果表的总行数,在这里又出现一个被处理的行数个数返回,说一下它们两个的不同,以我来看是mysql_num_rows具体说法是返回查询出来的结果表的总行数,而执行一些类似于插入、删除、更改操作是没有!是没有结果表的!那么只能用这条语句去判断是否执行成功了。。
大概就这么多吧,个人笔记...很重要