linux下c语言连接Mysql

最近新学linux编程,使用c语言,现在练手项目是一个C操作远程mysql数据库.之前一直从事.net开发,在.net下要连接Mysql很方便,引用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那样把这个库文件包含用项目里就可以了么。
展开
 我来答
jiangtao9999
2009-11-06 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:44%
帮助的人:8942万
展开全部
老大,原来你连 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 的。
上海莘默
2024-04-12 广告
**ODU重载连接器**ODU重载连接器是一种高性能、高密度的连接解决方案,广泛应用于各种工业自动化和通信设备中。它采用先进的设计理念和制造技术,具有优异的电气性能和机械强度,能够满足复杂环境下对数据传输和信号稳定的高要求。同时,ODU重载... 点击进入详情页
本回答由上海莘默提供
鬼火狼烟
2009-10-26 · TA获得超过6333个赞
知道大有可为答主
回答量:2275
采纳率:50%
帮助的人:2925万
展开全部
和.net同样的道理,你在.net也需要在你的部署包中包含dll才能去连接,除非你静态联接了相关的code, 在linux下你需要下载mysql的C库开发包(libmysql++-dev libmysql++2c2a libmysqlclient15-dev libmysqlclient15off) 这里面已经包含了动态库和静态库,如果是静态库链接,你就只需要把你的程序部署给别人即可,如果是动态链接,还需要把相关的.so也包含在你的部署包中分发给使用者
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轻松还谦和的标兵V
2009-10-30
知道答主
回答量:23
采纳率:0%
帮助的人:16.2万
展开全部
#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下的动态链接库)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
small0224
2009-11-05 · TA获得超过163个赞
知道答主
回答量:432
采纳率:0%
帮助的人:243万
展开全部
Mysql安装完有一个lib文件夹和一个include文件夹,将头文件和库文件引入,就可以连接了。写完的程序放在没有mysql的地方也可以远程连接,不过参数要写对。mysql提供了一堆的C接口,封装下用就好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式