visualC/C++连接MySql数据库
vs连接数据库其实就是将mysql数据库.h头文件接口、lib链接文件和dll执行文件加入到项目中。下面是配置如何加入。
转于http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html
一、VS2013工程设置工作
首先,建立一个windows应用程序的工程,将C/C++->预处理器->预处理器定义下的_WINDOWS改为_CONSOLE,

将连接器->系统->子系统 选择为控制台。

由于我们要使用Mysql的API,并且我们机子上肯定安装了Mysql数据库,所以我们要将工程的头文件路径指向Mysql安装目录的同文件mysql.h所在的位置,将连接库路径指向libmysql.lib所在的路径,
在我的机子上,Mysql 的安装路径为:C:\Program Files\MySQL\MySQL Server 5.1


我们需要把VS2008的工程中的头文件路径和连接库路径指向上面的两个地方:
将x项目属性页的C/C++->常规->附加包含目录指向:C:\Program Files\MySQL\MySQL Server 5.1\include

将项目属性页的链接器->常规->附加库目录指向:C:\Program Files\MySQL\MySQL Server 5.1\lib\opt.

将链接器->输入->附加依赖项中添加libmysql.lib。

如果不设置链接器->输入->附加依赖项中添加libmysql.lib,那么会出现如下的错误:
1>------ 已启动全部重新生成: 项目: MySql-Connect, 配置: Debug Win32 ------ 1>正在删除项目“MySql-Connect”(配置“Debug|Win32”)的中间文件和输出文件 1>正在编译... 1>MySql_Connect.cpp 1>x:\编程练习\c-c++\c\mysql_connect.cpp(35) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 参见“scanf”的声明 1>x:\编程练习\c-c++\c\mysql_connect.cpp(72) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 参见“sprintf”的声明 1>x:\编程练习\c-c++\c\mysql_connect.cpp(86) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 参见“sprintf”的声明 1>正在编译资源清单... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>正在链接... 1>LINK : 没有找到 d:\我的文档\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe 或上一个增量链接没有生成它;正在执行完全链接 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_free_result@4,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_num_fields@4,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_fetch_row@4,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_store_result@4,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_error@4,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_real_query@12,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_select_db@8,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用 1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用 1>d:\我的文档\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe : fatal error LNK1120: 10 个无法解析的外部命令 1>生成日志保存在“file://d:\我的文档\Visual Studio 2008\Projects\MySql-Connect\MySql-Connect\Debug\BuildLog.htm” 1>MySql-Connect - 11 个错误,3 个警告 ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
如果到这里你还没成功,继续看下面的解析:
之前经过配置,成功的在vs2013中成功的用c语言连接上的MySQL数据库,但是最近连接MySQL数据库,无论怎么配置,老是出错。
代码如下:
|
1
|
<ol class="dp-cpp"><li class="alt">#include <windows.h> #include <stdio.h> <li class="alt">#include <string.h> #include <mysql.h> <li class="alt"> #pragma comment (lib, "libmysql.lib") <li class="alt">#pragma comment (lib, "mysqlclient.lib") <li class="alt">int main() { <li class="alt"> char szTargetDSN[] = "test"; char szSqlText[500]=""; <li class="alt"> MYSQL * myData; myData = mysql_init((MYSQL*)0); <li class="alt"> //连接数据库 <li class="alt"> if(mysql_real_connect( myData, NULL, "root", "123456", szTargetDSN, MYSQL_PORT, NULL, 0)) { <li class="alt"> printf("数据库连接成功!/n"); //构造SQL语句 <li class="alt"> sprintf(szSqlText, "create table mytable" "(time datetime, s1 char(6), " "s2 char(11), s3 int, s4 int)"); if (mysql_query( myData, szSqlText)) <li class="alt"> {//执行SQL语句出错 printf( "Can't create table"); <li class="alt"> mysql_close( myData ); return FALSE; <li class="alt"> } printf("表创建成功/n"); <li class="alt"> mysql_close(myData); } <li class="alt"> return TRUE; <li class="alt">} </li></ol> |
错误如下:
error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_query@8,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用
采用了以下的办法:
点击
1.项目->属性->vc++目录。 然后在"包含目录"中添加"E:/Program Files/MySQL/MySQL Server 5.5/include" “库目录”中添加"E:/Program Files/MySQL/MySQL Server 5.5/lib"和"E:/Program Files/MySQL/MySQL Server 5.5/lib/Debug"。
2.项目->属性->链接器->输入->附加依赖项中添加libmysql.lib
但是编译依旧还是同样的问题。
于是开始思考,
lib是编译时需要的,dll是运行时需要的。
如果要完成源代码的编译,有lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
1.编译是通过静态链接库(lib)去找到接口的。
2.#pragma comment (lib, "libmysql.lib")
#pragma comment (lib, "mysqlclient.lib")
但是这两句代码并没有报错,证明这两个链接库也正常加入了啊。怎么还是出现“无法解析的外部符号”,很纳闷。
百思不得其解,踏遍百度谷歌必应。还是木有办法,或许就是那么灵光一闪,我擦。突然想起一个问题了。哥哥我装的是win7 64位啊,MySQL也是赤裸裸的64位,丫的,我用WIN32 项目搞毛线。于是有一个猜想就是,MySQL 64位的lib也是64位的接口。
于是用了两部去证明这个想法,
.项目->属性->配置管理器
活动解决方案平台,下拉选新建,出现一个新的对号框,在键入选择新平台中选择X64
最后重新编译,这次完全证明的我想法是对的。编译成功。哦也!
最后分析一下解决这个问题关键,其实这个问题很简单。搞明白dll和lib的作用,或许都能分析出这个问题了原因了。
写到这,再去搜索果不其然
http://www.linuxso.com/sql/19105.html
再一次说明,遇到问题要善于思考。
visualC/C++连接MySql数据库的更多相关文章
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- PDO连接mysql数据库
1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...
- Windows操作系统下远程连接MySQL数据库
用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...
- java 通过jdbc连接MySQL数据库
先了解下JDBC的常用接口 1.驱动程序接口Driver 每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类,简称Driver类.通常情况下,通过java.lang.Clas ...
- JDBC连接MySQL数据库代码模板
下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...
- PHP如何连接MySQL数据库
* PHP连接MySQL数据库 * 准备工作 * 在XAMPP软件的安装目录/php/ext目录中 * php_mysql.dll和php_mysqli.dll文件必须存在 * 在XAMPP软件的安装 ...
- JSP连接MySQL数据库问题
之前写了一大段,还说了一下具体JDBC连接数据库API的具体包的基本知识,哪知道自己手残不小心按了删除按钮.结果去看自动保存记录时,就只剩下下面这段了.好吧,其实最主要最核心的也就是下面这点了.具体如 ...
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
- Java连接MySQL数据库——含步骤和代码
工具:eclipse MySQL5.6 MySQL连接驱动:mysql-connector-java-5.1.27.jar 加载驱动: 1. 在工程目录中创建lib文件夹,将下载好的JDBC放到该文件 ...
随机推荐
- Quickhit快速击键
一.项目分析 根据输入速率和正确率将玩家分为不同等级,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高.如果玩家在规定时间内完成规定次数的输入,正确率达到规定要求,则玩家升级.玩家最高级别 ...
- 51nod 博弈论水题
51nod1069 Nim游戏 有N堆石子.A B两个人轮流拿,A先拿.每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误 ...
- Mysql管理工具SQLyog
SQLyog_Enterprise 用户名:yunjian 注册码:81f43d3dd20872b6 http://download.csdn.net/detail/shel_lee/585361 ...
- RAC实例 表空间 维护
先配置一下监听,这样我们就可以从客户端进行连接了. 我这里写了三种连接. 第一种是正常方式,一般都采用这种方式,后面的rac1和rac2 是方便测试.因为如果用第一种方式的话,客户端连哪个实例是随机的 ...
- jsonp实现跨域访问
要实现JSONP跨域访问,首先就要了解什么是跨域?然后JSONP与JSON的关系? 1.什么是跨域? 跨域简单的说就是一个域名下的程序和另一个域名下的程序做数据交互.比如说:现有一个http://ww ...
- [转] C# 绘制报表,使用Graphics.DrawString 方法
原文 Graphics.DrawString 方法 在指定位置并且用指定的 Brush 和Font 对象绘制指定的文本字符串. public void DrawString( string s, Fo ...
- [再寄小读者之数学篇](2014-11-26 广义 Schur 分解定理)
设 $A,B\in \bbR^{n\times n}$ 的特征值都是实数, 则存在正交阵 $P,Q$ 使得 $PAQ$, $PBQ$ 为上三角阵.
- redhat 下Redis安装
Redis 官网:http://redis.io/ 下载地址: http://redis.io/download 安装方法: cd opt wget http://download.redis. ...
- 九度 Online Judge 之《剑指 Offer》一书相关题目解答
前段时间准备华为机试,正好之前看了一遍<剑指 Offer>,就在九度 Online Judge 上刷了书中的题目,使用的语言为 C++:只有3题没做,其他的都做了. 正如 Linus To ...
- ansible官方文档翻译之变量
Ansible变量 在使用ansible变量的时候,主要是因为各个系统的不同,从而需要使用不同的变量来进行设置,例如在设置一些配置文件的时候,有大部分内容是相同的,但是一部分内容是和主机的ip地址或者 ...