- 浏览: 383531 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (196)
- window编程 (18)
- FLEX (37)
- 数据库 (5)
- Java---Struts2 (8)
- Window相关知识 (4)
- 网站建设相关知识 (2)
- java基础知识 (6)
- C# (8)
- 虚拟化 (3)
- 服务器--sound server (1)
- 网络协议 (5)
- Linux (21)
- linux-命令 (3)
- Windows-2008R2 (1)
- VBScript,异常处理 (1)
- windows域 (1)
- 弦歌不辍 (1)
- 语言---c++ (16)
- MFS (1)
- grub (1)
- 技术介绍 (3)
- 百度之星 (5)
- Web服务 (1)
- 存储管理 (2)
- NoSQL (3)
- plymouth (1)
- 工具 (1)
- 云计算 (1)
- 嵌入式 (1)
- usbip (1)
最新评论
-
canghailan:
C++中能直接操作的最大位数64,每64位统计,最后相加,暂时 ...
判断一段内存是否全部为0 -
yiranwuqing:
canghailan 写道Hamming weight 算法应 ...
判断一段内存是否全部为0 -
canghailan:
Hamming weight 算法应该效率更高
判断一段内存是否全部为0 -
zoufangyingzi:
楼主都用了哪些jar包,压缩包中没有lib包///
Rest实例演示 -
zpz112358:
具体是什么意思啊?
flex blazed 配置多个remoting-config
一直以来都想用C/C++来操作Mysql数据库,应用C++的高效率和严密的语法,我窍以为处理效果会更好。因为一直用php的时候,总觉得格式是简单,但不够严密,有时会出现一些意想不到的结果,可能也只是我对php理解肤浅或偏见吧。
C++操作数据库肯定是可以的,但好像有点麻烦。直接使用VC的添加数据库向导,但各种途径都找不到Mysql的驱动程序,只能告罢。在网上找了很多资料,有建立数据库连接池的,有建立数据操作的实例或者完整的类,但对于环境配置的,或者说是指导怎样建立数据库连接,都语焉不详,若照着一步步进行操作,最终总是错误,所以我只能探索着来了。
经过一整天的探索,终于可以成功“执行”了,顺利进行连接和各种操作,如create、insert into、select、fetch_row等。下面将这整个配置过程,记录下来,以供有兴趣者参考,这里使用的是Mysql提供的C API进行的。
一、当然是要安装mysql服务器,在安装过程有一步选择安装组件的,请把Developer components(开发组件)选上,这样安装之后才有include文件夹及里面的C头文件,而这些文件在下面操作将会用到。当然也可以不安装开发组件,但下面操作涉及的包含文件,就必须从其他途径得到。
二、把libmysql.dll复制到操作系统的system目录下(如c:\windows\system32)。libmysql.dll一般在Mysql安装后文件夹的/lib/debug/目录下。但需要提醒一下,(一)提到的安装开发组件并非必要,但如果不安装会出现一个小问题。因为安不安装开发组件,最后得到libmysql.dll不一样的,如我自己的系统不安装开发组件时的libmysql.dll大小是1496k,而安装了却是1968k。而且使用不安装开发组件时的libmysql.dll时,在其他条件配置完成情况下程序也能编译执行,基本操作也能达到预期效果,只是执行后会出现这样的错误提示"Error in my_thread_global_end();3 threads didn't exit",其中的道理我不慎明了,但知道出错了。
三、要使用Mysql提供的API就必须包含mysql.h(#include "mysql.h" ),当然如果只是简单加入这个语句,编译时肯定提示找不到文件mysql.h的错误。按照网上给的做法,把“\mysql\include”添加到编译选项的包含路径中(如我的安装路径是“C:\Program Files\MySQL\MySQL Server 5.0”,则在Project Options中加入 /I "C:\Program Files\MySQL\MySQL Server 5.0\include\")。但我这样操作了,还是出现找不到文件的错误提示,至今不知为何。所以在这里提供另外两种我尝试可行的办法。(1)在文件包含时提供路径,如我使用#include "C:\Program Files\MySQL\MySQL Server 5.0\include\mysql.h"来包含头文件。(2)把头文件复制到VC的头文件库里(如C:\Program Files\Microsoft Visual Studio\VC98\Include),不能只复制一个mysql.h文件,因为mysql.h也包含其他文件,经过实际探索,必须复制一下六个文件:mysql.h my_alloc.h my_list.h mysql_com.h mysql_time.h mysql_version.h typelib.h,然后就可以直接#include "mysql.h"。到这里程序可以编译通过了,即Compile main.cpp通过。
但组建可执行程序(Build main.exe)就出错了,有诸多Error,提示类似"main.obj : error LNK2001: unresolved external symbol _mysql_num_fields@4",这是库文件链接失败,下一步操作就解决这个问题。
四、在mysql安装的/lib/debug/目录下可以找到libmysql.lib这个文件,这就是我们需要的文件。在网上搜索一下,lib文件一般是函数定义编译后的库文件,也就是程序中的使用mysql_num_fields、mysql_num_rows等操作数据库的函数的定义了。所以必须使程序链接时找到这个文件,类似于(三),方法有两种:(1) 在VC的Project->Setings对话框的link选项卡最下面的Project Options文本框加入"C:\Program Files\MySQL\MySQL Server 5.0\lib\debug\libmysql.lib"。(2)把libmysql.lib复制进VC的库文件里(如复制进这个目录C:\Program Files\Microsoft Visual Studio\VC98\Lib),然后在(1)中提到的Project Options中只要加入libmysql.lib就行。
经过以上的配置之后就可以使用C++链接mysql数据库了,而且可以使用mysql提供的C API进行数据库程序的开发。下面对几个基本函数进行简单说明(参考网文稍加修改),详细说明请看mysql文档:
---- 1. MYSQL *mysql_init(MYSQL *mysql)
---- 初始化一个类型为MYSQL的数据结构,为执行mysql_real_connect()做准备。参数
mysql为指向该结构的指针,如果mysql为NULL,则新建并初始化一个MYSQL的数据结构。
新建的结构将在mysql_close()中释放。
---- 若成功,返回初始化的MYSQL数据结构的指针,否则返回NULL。
---- 2. MYSQL *mysql_real_connect(MYSQL *mysqlStruct, const char *host,
---- const char *user, const char *passwd, const char *db,
---- unsigned int port, const char *unix_socket, unsigned int client_flag)
---- 与MySQL数据库引擎建立连接。在执行进一步的数据操作之前,必须保证mysql_real_connect()成功返回。
---- 参数mysqlStruct是mysql_init()的返回值;
---- 参数host是运行MySQL数据库引擎的机器的TCP/IP主机名,如为NULL则默认为"localhost";
---- 参数user和passwd是MySQL数据库的合法用户和口令;
---- 参数db是连接的数据库名;
---- 参数port,unix_socket和client_flag一般取默认值。如果端口不是mysql默认的3306,就必须指明。
---- 3. int mysql_query(MYSQL *mysql, const char *query)
---- 执行query字符串中的SQL语句,query必须以\0结尾。如果成功,返回0。
---- 4. MYSQL_RES *mysql_store_result(MYSQL *mysql)
---- 返回SELECT,SHOW,DESCRIBE, EXPLAIN等语句执行的结果。函数新建一个MYSQL_
RES的数据结构,把结果存储在该结构中。如果查询没有匹配的结果,则返回空数据集。
处理完结果集后,必须调用mysql_free_result()。
---- 如果出错,返回NULL,否则返回MYSQL_RES结构的指针。
---- 5. MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
---- 取回结果集中的下一条记录,如果没有记录或出错,返回NULL。一条记录中的字段
数可以用mysql_num_fields(result)获得,各字段的值可以用row[0] 到 row[mysql_nu
m_fields(result)-1]的数组来访问。
下面提供一个示例程序,以供参考,只要新建win32 console Aplication工程,新建C++ Source File,然后复制进去,进行如上面所述的各项环境配置就能执行:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "mysql.h"
void ErrLog(const char *str){
printf("%s",str);
}
int main( int argc, char * argv[] )
{
//数据库名
char szTargetDSN[] = "DBname";
//Sql语句
char szSqlText[500]="";
char aszFlds[ 25 ][ 25 ];
//连接数据库的合法用户名
const char username[] = "root";
//密码
const char password[] = "root_password";
//链接端口,默认为3306
unsigned int port = 3306;
MYSQL* myData ;
MYSQL_RES * res ;
MYSQL_FIELD * fd ;
MYSQL_ROW row ;
int i,j,k;
BOOL bCreate = TRUE;
if ( (myData = mysql_init((MYSQL*) 0)) && mysql_real_connect( myData, NULL, username, password, szTargetDSN, port, NULL, 0 ) )
{
/*sprintf(szSqlText,"SET NAMES 'gb2312' ");
//sprintf(szSqlText,"insert into yygtext (id,yygtext) values(2,'这是测试用的')");
if(mysql_query(myData,szSqlText)){
ErrLog("set character false");
} */
//table_name为数据表,运行本程序必须在'DBname'库存在'table_table',可根据实际情况进行设置。
sprintf(szSqlText,"select * from table_name limit 0,12 ");
if(mysql_query(myData,szSqlText)){
mysql_close(myData);
printf("select failed.\n");
return false;
}else{
res = mysql_store_result(myData);
i = (int)mysql_num_rows(res);
printf( "Query: %s\n%ld records found: \n", szSqlText, i ) ;
for(i=0;fd=mysql_fetch_field(res);i++){
strcpy(aszFlds[i],fd->name);
}
for(i=1;row=mysql_fetch_row(res);){
j = mysql_num_fields(res);
for(k=0;k<j;k++){
printf("%s:\t%s\n",aszFlds[k],row[k]);
}
printf("--------------------------------------\n");
}
mysql_free_result(res);
}
}else{
ErrLog("\n connect DB failed. ");
mysql_close( myData ) ;
return false ;
}
mysql_close( myData ) ;
return true ;
}
转自:http://hi.baidu.com/yygspace/blog/item/7e597851d351d310367abef0.html
发表评论
-
对于一个整数大小的bit数组中的非0 位统计的方法--bitcount [转]
2013-04-10 21:36 2107对于bit数组中非0位个数统计的方法,请看以下文章 pop ... -
判断一段内存是否全部为0
2013-04-05 22:07 2705方法一: start = clock(); ... -
对动态申请的字符串进行strtok处理时注意的问题
2012-12-14 18:57 0今天在对字符进行strtok处理时 源代码 ... -
conflicting types for
2012-04-06 14:58 2164错误:test.c:22: error: conflictin ... -
一些Warning的解决 C语言
2012-03-31 15:08 7079问题一:[Warning] assignment makes ... -
关于strtok的问题,已经解决办法(对空字符串切分存在问题)
2012-03-30 20:09 1448在编写程序是发现string.h中的strtok有些 ... -
HashTable简单实现,使用ELFHash 哈希
2012-03-26 09:25 1824头文件 #ifndef __GHASH_H_ #de ... -
转:C语言的编译过程---推荐
2012-02-20 22:27 679编译,编译程序读取源程序(字符流),对之进行词法和语法的分析, ... -
mysql_real_connect()连接远程数据库
2011-12-06 10:40 2281关于如何用mysql_real_conne ... -
一个c回调函数的例子
2011-10-28 16:55 965#include <stdio.h>typedef ... -
c程序编译流程
2011-10-23 10:54 8081.预处理(Pre-Processing)2.编译(Com ... -
C和C++混合编程
2011-10-23 10:44 10161.#pragma once关于#pragma o ... -
C程序组成部分(内存布局)
2011-10-23 10:38 966一、C程序组成部分1)正文段——CPU执行的机器指令部分;一个 ... -
析构函数virtual与非virtual区别
2011-10-23 10:26 844作为通常的原则,如果一个类定义了虚函数,那么它的析构函数就 ... -
const char* 与char*const的区别
2011-10-23 10:18 1575C++标准规定,const关键字放在类型或变量名之前等价的。 ... -
C++语言必备
2011-09-29 16:09 1335C/C++是最主要的编程语 ...
相关推荐
vc++ 连接MySql类vc++ 连接MySql类vc++ 连接MySql类vc++ 连接MySql类
在VC++6.0/2005开发环境下如何使用MYSQL
VC++ 连接mysql数据库实例源码 需要使用mysql4.0或5.0连接,代码里的密码,自己可以改一下,重编译后再试
VC++ 封装的Ado操作类,可以对数据库进行简单的增删改查,而不用直接调用ADO的是三个接口,操作简单
mysql5版本和依赖的vc++ (vcredist包),关注我有更多安装包。
VC++实现读取MySQL数据库,使用了三种方式ODBC、ADO、 CAPI。
VC++访问 MySQL数据库案例,源代码可用
代码已测试OK,使用之前先按照VS2010和数据库MySQL5.6,按照源码中的账号和密码配置数据即可访问。
mysql vc++ lib,mysql.h和mysqlclient.lib静态库
VC++6 开发数据库大多ADO接MSSQL, 而MySQL 5.X也是优秀的数据库且免费当下开发MySQL很热门,这个例子是VC++6 通过 相关的DLL代码包访问MYSQL数据库,的基本操作,需要的朋友可参考,VC++6环境下编译通过
亲自在VC++6.0下编译、发布,完美运行,包含源代码,安装设置文档、数据库文件,值得初学者学习研究!
使用 vs 或者 vc 调用 mysql数据库
mysql数据库mysql数据库mysql数据库VC++6.0中用ODBC连接mysql数据库VC++6.0中用ODBC连接mysql数据库
VC++6.0操作 mysql库。 读取数据库时,实现了根据字段名读取其值的方法。 并且解决了中文存储读取的问题。 编译时,记得把mysql下的include及lib分别加入到VC++6.0目录下(工具-》选择-》目录)。
人事管理系统 vc++mysqlserver 2005完成基本功能人事管理
vc++mysql模板vc++mysql模板vc++mysql模板vc++mysql模板vc++mysql模板vc++mysql模板
VC操作mysql5.7数据库进行添加数据 删除数据 并且对删除的数据库表进行瘦身。本文件里面的操作的数据库用户名,密码,端口在源代码里面有。如果要编译链接的话,首先要把mysql5.7安装到默认C盘路径,并且要按照代码...
vc++_利用ADO访问MYSQL数据vc++_利用ADO访问MYSQL数据vc++_利用ADO访问MYSQL数据vc++_利用ADO访问MYSQL数据vc++_利用ADO访问MYSQL数据vc++_利用ADO访问MYSQL数据vc++_利用ADO访问MYSQL数据vc++_利用ADO访问MYSQL数据...
vc++进行连接mysql的Demo(类似一个mysql客户端,相当强大哦)