- 浏览: 391760 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (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 2179对于bit数组中非0位个数统计的方法,请看以下文章 pop ... -
判断一段内存是否全部为0
2013-04-05 22:07 2780方法一: start = clock(); ... -
对动态申请的字符串进行strtok处理时注意的问题
2012-12-14 18:57 0今天在对字符进行strtok处理时 源代码 ... -
conflicting types for
2012-04-06 14:58 2229错误:test.c:22: error: conflictin ... -
一些Warning的解决 C语言
2012-03-31 15:08 7116问题一:[Warning] assignment makes ... -
关于strtok的问题,已经解决办法(对空字符串切分存在问题)
2012-03-30 20:09 1480在编写程序是发现string.h中的strtok有些 ... -
HashTable简单实现,使用ELFHash 哈希
2012-03-26 09:25 1848头文件 #ifndef __GHASH_H_ #de ... -
转:C语言的编译过程---推荐
2012-02-20 22:27 714编译,编译程序读取源程序(字符流),对之进行词法和语法的分析, ... -
mysql_real_connect()连接远程数据库
2011-12-06 10:40 2317关于如何用mysql_real_conne ... -
一个c回调函数的例子
2011-10-28 16:55 991#include <stdio.h>typedef ... -
c程序编译流程
2011-10-23 10:54 8421.预处理(Pre-Processing)2.编译(Com ... -
C和C++混合编程
2011-10-23 10:44 10441.#pragma once关于#pragma o ... -
C程序组成部分(内存布局)
2011-10-23 10:38 989一、C程序组成部分1)正文段——CPU执行的机器指令部分;一个 ... -
析构函数virtual与非virtual区别
2011-10-23 10:26 887作为通常的原则,如果一个类定义了虚函数,那么它的析构函数就 ... -
const char* 与char*const的区别
2011-10-23 10:18 1604C++标准规定,const关键字放在类型或变量名之前等价的。 ... -
C++语言必备
2011-09-29 16:09 1369C/C++是最主要的编程语 ...
相关推荐
在C++中,使用MySQL库进行数据库操作的基本流程包括: 1. 初始化连接环境:使用`mysql_init()`初始化一个`MYSQL`结构体实例。 2. 连接数据库:通过`mysql_real_connect()`函数指定服务器地址、用户名、密码和数据库...
这就是使用VC++读写MySQL的基本流程。为了进一步优化,你还可以考虑使用预编译的`PreparedStatement`对象,提高代码的可读性和安全性,避免SQL注入等风险。同时,如果需要异步操作或更复杂的事务管理,可以研究使用`...
**总结**:本文详细介绍了MySQL在Windows操作系统下的安装配置流程,包括下载安装包、安装MySQL、配置环境变量、其他配置以及如何使用MySQL等内容。每一步都提供了具体的指导和注意事项,帮助用户顺利完成MySQL的...
以上就是使用VC6.0连接和操作MySQL数据库的基本流程。实际开发中,你可能还需要考虑线程安全、连接池、事务处理、错误处理等更复杂的细节。通过这种方式,你可以利用C++的强大功能,结合MySQL的高效数据管理,构建出...
总的来说,这篇内容涵盖了如何在VC++6.0环境下使用ODBC连接MySQL数据库的基本流程,包括ODBC驱动的安装、数据源的配置,以及在MFC应用中编写数据库连接代码的步骤。通过这些步骤,开发者能够实现与MySQL数据库的交互...
5. **MySQL API**:在VC++中连接MySQL通常会使用MySQL C API,包括初始化数据库连接、执行SQL语句、处理结果集等操作。开发者需要熟悉API函数如mysql_init(), mysql_real_connect(), mysql_query()等。 6. **错误...
在VC++6.0环境下操作MySQL数据库,主要是通过MySQL C++ Connector库来实现的,这是一个官方提供的API,允许C++程序与MySQL服务器进行交互。"Vc操作 MySQL"的主题涉及了以下几个关键知识点: 1. **MySQL数据库系统**...
7. **文件操作**:保存和加载配置文件、导出报表等任务需要进行文件操作,VC++提供了丰富的文件I/O函数供开发者使用。 8. **数据验证和业务逻辑**:系统会包含大量的业务规则,如价格计算、库存检查等,这些都需要...
VC++可以通过ODBC(Open Database Connectivity)或ADO(ActiveX Data Objects)与各种类型的数据库(如SQL Server、MySQL)建立连接。数据库设计应包括图书表、读者表、借阅记录表等,确保数据的一致性和完整性。 ...
在使用VC++连接MySQL 5.0时可能会遇到编译错误,例如: - `C:/MYSQL/INCLUDE/mysql_com.h(116) : error C2146: syntax error : missing ';' before identifier 'fd'` - `C:/MYSQL/INCLUDE/mysql_com.h(116) : error ...
以上就是使用VC++ MFC操作ODBC数据库的基本流程和关键知识点。在实际项目中,可能还需要考虑事务处理、游标类型、批处理操作、性能优化等问题。理解并熟练掌握这些概念和技巧,将有助于构建高效、稳定的数据库应用。
5. **历史数据存储与分析**:为了便于故障排查和优化控制策略,软件还需要保存设备的历史运行数据,可能需要数据库的支持,如SQL Server或MySQL。 6. **人机交互**:提供友好的用户界面,方便操作员进行参数设置、...
- 对于VS,打开“项目属性” -> “配置属性” -> “VC++目录” -> “包含目录”,添加MySQL Connector/C的头文件路径。 - 对于VC++ 6.0,你需要在“Tools” -> “Options” -> “Directories”下添加头文件和库...
MySQL 5.5 是一个广泛使用的开源关系型数据库管理系统,其稳定性和性能使其在各种规模的应用中占有一席之地。本资源"mysql5.5_include_...正确配置和使用这些文件,可以极大地简化数据库驱动的C++应用程序的开发流程。
这个源码可能是一个完整或部分的酒店管理系统,涵盖了预订、入住、退房等酒店业务流程的实现。 【描述】"Use VC SQL hotel system source code" 提到使用了SQL与VC++结合的酒店管理系统源代码。这表明项目中不仅有...
总的来说,"vc++6.0环境下与数据库连接:生成程序框架时导入数据源"这一主题涵盖了数据库驱动、ODBC管理、MFC类库的应用以及数据库操作的基本流程。通过理解并实践这些知识点,你将能够在VC++ 6.0中构建出能够与各种...
数据库接口通常使用ODBC(Open Database Connectivity)或者ADO(ActiveX Data Objects),使得VC++程序能方便地访问SQL Server、MySQL等数据库,进行数据的读写操作。在设计数据库时,开发者会考虑数据的一致性、...
【MySQL笔记中的压缩包】包含了关于MySQL数据库管理系统的...在实际操作中,理解MySQL的安装步骤、配置选项和服务管理是至关重要的,因为它们构成了数据库系统的基础,并直接影响到后续的数据存储、查询和应用开发。
可能使用的关系型数据库管理系统(RDBMS)如SQL Server或MySQL,它们支持结构化查询语言(SQL)来操作数据。 4. **sql**:SQL(Structured Query Language)是用于管理关系数据库的标准语言,包括查询、更新、插入和...
1. **系统需求**:在安装MySQL5之前,需要确保操作系统满足最低硬件和软件要求。通常,Windows XP SP3及以上版本,以及一定的内存和硬盘空间是基本条件。同时,系统应安装有VC++运行库等必备组件,以确保MySQL能正常...