VC++6.0 MySQL C API接口连接数据库方法

来源:互联网 发布:大淘客口令源码下载 编辑:程序博客网 时间:2024/05/08 05:18


以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 <afxwin.h>         // MFC core and standard components

二、用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具体说法是返回查询出来的结果表的总行数,而执行一些类似于插入、删除、更改操作是没有!是没有结果表的!那么只能用这条语句去判断是否执行成功了。。

大概就这么多吧,个人笔记...很重要


原创粉丝点击