linux下c语言连接Mysql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下c语言连接Mysql相关的知识,希望对你有一定的参考价值。

最近新学linux编程,使用c语言,
现在练手项目是一个C操作远程mysql数据库.
之前一直从事.net开发,
在.net下要连接Mysql很方便,引用mysql提供程序就可以了,下载一个dll文件,然后引用到项目里,客户开不需要安装MyMsql客户端就可以连接远程mysql服务器了。
现在换到Linux+c语言下面,我的机器上没有安装Mysql Client,
只是引用了 #include<mysql.h> 是不可以的。
我想问的是:
c语言环境,是类似.net这种方式,只要下载库文件,然后去引用进项目么?
如果是这样子的,请问怎么操作。谢谢。
之前看到一篇:Linux下C语言连接MySQL的帖子,要在本地机器上安装Mysql Client,这样才会有对应的Mysql库,这样c语言环境才可以连接远程库.
如果非要这样的话,
我想布属的时候也要求别人安装Mysql Client?,可不可以像类似.net里面,只要引用一个dll文件就可以了呢。
这样的情况下,怎么样用 c去连接远程 Mysql呢
我想问一下
包含的头文件
#include "/usr/local/mysql/include/mysql/mysql.h" /*为绝对路径*/
要自己去手动安装mysql的驱动程序么
回 jiangtao9999:
因为一直在.net下开发,对linux和c开发基本空白,习惯了.net下"程序集"这个东西,要用什么,直接引用到项目中,比如要连接mysql,只要下载mysql提供程序集,也就是一个dll,把这个dll包含到项目中,项目只要拷到别人机器上就可以运行了,别人运行这个程序不需要任何安装mysql驱动的工作。
现在linux 环境下,不了解怎么实现的,搜索网络得知,要自己去安装一个mysql库.我的意思是可以类似.net那样把这个库文件包含用项目里就可以了么。

老大,原来你连 C 的原理都不会啊?

C 语言所有调用函数,都要有声明,这种外部函数库的调用,都要用他们的 header 文件来声明函数变量等等的东西,编译器会根据实际情况去把这些程序里面的函数调用链接到函数库的正确位置上。

微软的产品因为他垄断了他自己系统的所有功能设计。所以他的系统+他的开发程序+他的开发函数库就不需要 header 文件了,因为它可以设计为 dll 本身含有足够的信息去干别的事情了。所以,你别以为你用了微软的 .net ,他就还是 C 语言了。他已经脱离了 C 语言的范围了。

GCC一般情况下是编译器,但编译器是不够的,还需要连接器的工作才行。binutils 里面的软件提供相关的功能。

要知道以前链接到函数库功能,光有 header 和函数库文件本体还是不行的,还需要另外的函数库信息文件来帮助编译器连接器来找到正确的函数入口位置才行的。

你编程 C ,你要选择你所使用的功能调用方法,GCC 一般调用 mysql 有调用外部 dll ,或者程序自己直接链接 mysql 端口,自己分析 mysql 服务进程发送的各种信息!

前一种办法,可以直接选择 mysql 客户端里面的 SDK 来直接获得官方的功能支持,但官方 MySQL 是 GPL 协议发布的,你使用他的功能接口后,你的程序也必须以 GPL 发布,不然你就要去选择其他的函数库,比如 ODBC 的 mysql 库。当然还有第三方的 mysql 功能库可以选择。
不过你要注意,LGPL 必须严格区分你的程序和 LGPL 代码。你必须动态链接到 LGPL 函数库。如果你的程序包含 LGPL 函数库一起发布,且 LGPL 库是你的软件的必备函数库,那么你的程序也必须开源,但不是 GPL 而是 LGPL !

不然你就选择自己写程序直接与 mysql 服务器进行数据传输,不使用第三方功能库。

但我不认为身为一个 Linux 下程序开发人员,会去傻傻的自己写功能函数而不是用现成的函数库。

你所遇到的“非要客户安装 mysql client ”,就是因为你的软件调用了一些非你自己编写的函数调用功能,而为了获取这些函数而需要安装几个 mysql 函数库的问题。

这个问题我想不应该是一个开发人员提出来的吧?
------------------------------------

楼主你还是重新学习 C 语言吧。.net 的 C 被微软改的不是真正的 C 语言了,所以你没办法按照 C 的标准去比较 .net 和 GCC 的。
而且很多 .net 的编程习惯也没办法延续到 GCC 的。
参考技术A 和.net同样的道理,你在.net也需要在你的部署包中包含dll才能去连接,除非你静态联接了相关的code, 在linux下你需要下载mysql的C库开发包(libmysql++-dev libmysql++2c2a libmysqlclient15-dev libmysqlclient15off) 这里面已经包含了动态库和静态库,如果是静态库链接,你就只需要把你的程序部署给别人即可,如果是动态链接,还需要把相关的.so也包含在你的部署包中分发给使用者本回答被提问者采纳 参考技术B #include "/usr/local/mysql/include/mysql/mysql.h" /*为绝对路径*/
#include <stdio.h>

int main()

char *user = "vod", *pwd = "vod", *dbname = "vod", *host="211.161.159.106";
MYSQL mysql;
MYSQL_RES *mysql_ret;
MYSQL_ROW mysql_row;
unsigned long num_rows;
int ret;

mysql_init(&mysql);

if(mysql_real_connect(&mysql,host,user,pwd,dbname,0,NULL,0))

printf("Connection success!\n");
ret = mysql_query(&mysql,"select * from user");
if(!ret)

printf("Query Success!\n");
mysql_ret = mysql_store_result(&mysql);
if(mysql_ret != NULL)

printf("Store Result Success!\n");
num_rows = mysql_num_rows(mysql_ret);
if(num_rows != 0)

printf("%d\n",num_rows);
while(mysql_row = mysql_fetch_row(mysql_ret))

printf("%s\t%s\t%s\t%s\t%s\t%s\n",mysql_row[0],mysql_row[1],mysql_row[2],mysql_row[3],mysql_row[4],mysql_row[5]);


else

printf("mysql_num_rows Failed!\n");
return(-1);

mysql_free_result(mysql_ret);
return(0);

else

printf("Store Result Failed!\n");
return(-1);


else

printf("Query Failed!\n");
return(-1);


else

printf("Connection Failed\n");
return(-1);


自己看吧,写的我累死了,运行没问题的。流程都在里面了。你会用GCC编译器编译它吧?(废话,呵呵,不过注意带几个mysql下的动态链接库)
参考技术C Mysql安装完有一个lib文件夹和一个include文件夹,将头文件和库文件引入,就可以连接了。写完的程序放在没有mysql的地方也可以远程连接,不过参数要写对。mysql提供了一堆的C接口,封装下用就好。

以上是关于linux下c语言连接Mysql的主要内容,如果未能解决你的问题,请参考以下文章

C语言连接MySQL

Linux 下C语言 连接mysql段错误

linux系统下c语言连接mysql数据库时有关mysql_error这个函数的返回值的问题,求知情人士

数据库连接C语言

数据库连接C语言

MySQL----C语言连接(简略)