在VC6.0中连接mysql数据库的方法实例

最近用JAVA写程序,在连接数据库并操作上感觉还是较其他语言简单多了,在这方面C/C++就显得有点繁杂,不过也并非难事。

首先就是要清除mysql提供的关于C的API,连接:http://dev.mysql.com/doc/refman/5.1/zh/apis.html

内容包括以下,用到的大概前几项,主要是数据类型,函数概括,函数描述

25.2. MySQL C API
25.2.1. C API数据类型 25.2.2. C API函数概述 25.2.3. C API函数描述 25.2.4. C API预处理语句 25.2.5. C API预处理语句的数据类型 25.2.6. C API预处理语句函数概述 25.2.7. C API预处理语句函数描述 25.2.8. C API预处理语句方面的问题 25.2.9. 多查询执行的C API处理 25.2.10. 日期和时间值的C API处理 25.2.11. C API线程函数介绍 25.2.12. C API嵌入式服务器函数介绍 25.2.13. 使用C API时的常见问题 25.2.14. 创建客户端程序 25.2.15. 如何生成线程式客户端
以上内容非常全面,是mysql官方资料,要自己多看多了解,学会查询即可。

知道了上面的内容,那自己写个连接代码也是很容易的,主要就是几个异常的检测以及连接操作,具体的API上面目录里都有详细讲解,在此只贴出代码:

必要的头文件包括以下:

#include <winsock.h>  //最好放在首位,位置关系会导致错误,mysql.h
#include <mysql.h>
#include <stdio.h>
#include <cstring>
#include <string>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libmysql.lib")
using namespace std;


连接及操作的代码实现:
     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;}

     if (NULL != mysql_init(&mydata)) { cout << "mysql_init() succeed" << endl;}
	 else { cout << "mysql_init() failed" << endl;  return -1;}

     if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk")) 
	 {cout << "mysql_options() succeed" << endl; }  return -1;  }
  
     if(NULL!=mysql_real_connect(&mydata,"localhost","root","","cap",3306,NULL,0))  //更改项
	 {cout << "mysql_real_connect() succeed" << endl;}       
 	 else { cout << "mysql_real_connect() failed" << endl;return -1;  }

///*****************************/  生成数据,可忽略不看  /***************/
		 mysql_query(&mydata,"truncate table n_e_w;");
		 string sqlstr;   
		 sqlstr += "insert into n_e_w "; 
		 sqlstr += "set input=(SELECT c_name FROM concept ORDER BY RAND() LIMIT 1),";
		 sqlstr += "output=(SELECT c_name FROM concept ORDER BY RAND() LIMIT 1),";
		 sqlstr += "beforer=(SELECT c_name FROM concept ORDER BY RAND() LIMIT 1),";
		 sqlstr += "afterr=(SELECT c_name FROM concept ORDER BY RAND() LIMIT 1),";
		 sqlstr += "s_one=(SELECT s FROM s_table ORDER BY RAND() LIMIT 1),";
		 sqlstr += "s_two=(SELECT s FROM s_table ORDER BY RAND() LIMIT 1),";
		 sqlstr += "s_three=(SELECT s FROM s_table ORDER BY RAND() LIMIT 1);";
		 for(int t = 0; t < 30 ; t++)mysql_query(&mydata,sqlstr.c_str()); 
//******************************/  获得数据,存到traindata  /**************/
        MYSQL_RES *result = NULL;
        mysql_query(&mydata,"SELECT * FROM n_e_w");
       
        result = mysql_store_result(&mydata); //取得并打印行数
        int rowcount = mysql_num_rows(result);
      
        unsigned int fieldcount = mysql_num_fields(result);  //取得并打印各字段的名称

        MYSQL_ROW row = NULL;
        row = mysql_fetch_row(result);	    
		for(int j=0;j<rowcount;j++)
		{ 
			 for(int i = 0; i < fieldcount-1; i++)
			 {
				traindata[j][i] = row[i];
				//cout<<"整个结果集显示:"<<traindata[j][i] <<"\t";
			 }	    	 		
                        row = mysql_fetch_row(result);
		}	  	  
           //for(int ii=0;ii<DEFINE_COUNT;ii++) cout<<traindata[ii][1]<<endl;
           mysql_free_result(result) ;
	   mysql_close(&mydata);
	   mysql_server_end();

上述内容只是简单的建立连接后查询内容,其中只在建立连接部分做了异常判别处理,其实还有很多工作没有做,比如未涉及的创建表,删除表等等操作,其都有对应的异常判别的API函数,通过IF条件判断,可以对创建不成功或删除不成功等异常情况予以显式输出,从而完善代码。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - 

以上是代码书写的工作,其实在书写代码之前,要用C++连(本人用的VC6.0)数据库,还要在VC中做相应的配置工作:

      (1)打开VC6.0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Show directories for:”下拉列表中选中“Includefiles”,然后在中间列表框中添加你本地安装MySQL的include目录路径(X:\...\include)。

      (2)在“Show directories for:”下拉列表中选中“Library files”,然后添加本地安装MySQL的Lib目录路径。Lib目录下还有debug和opt两个目录,建议选debug(X:\...\lib\debug)。

      (3)在“Project settings->Link:Object/library modules”里面添加“libmysql.lib”。

      (4)在程序开头的写法,具体参照上文中代码。

             注:#include "winsock.h"一定要写在#include "mysql.h"的前面,否则出错。

      (5)将“libmySQL.lib、libmySQL.dll”拷到你所建的工程的目录下。


到此,完成配置后,即可进行连接并对数据库进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值