本文出自   http://blog.csdn.net/shuangde800


首先保证安装:
1:安装MySQL:sudo apt-get install mysql-server mysql-client
2:安装MySQL开发包:sudo apt-get install libmysqlclient15-dev
此时需要用到的头文件会出现在/usr/include/mysql/里
 
 
 

C语言连接MySQL数据库

此包含两个步骤:
1. 使用函数mysql_init初始化一个连接句柄结构.
mysql_init的函数定义如下:
MYSQL * mysql_init(MYSQL *);

通常传递NULL给这个例程,他会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,它将会重新初始化。这个例程在出错时返回NULL.

 
2. 实际进行连接
目前只是分配和初始化了一个结构,仍然需要使用mysql_real_connect来向一个连接提供参数, 
mysql_real_connect的函数定义:
  1. MYSQL* mysql_real_connect(MYSQL* connection,
  2. const char *server_host,
  3. const char *sql_user_name,
  4. const char *sql_password,
  5. const char *db_name,
  6. unsigned int port_number,
  7. const char *unix_socket_name,
  8. unsigned int flags);

指针connection必须指向已经被mysql_init初始化过的结构。

注意server_host既可以是主机名,也可以是IP地址。如果连接本地,可以制定localhost来优化。

sql_user_name和sql_password的含义和它们的字面意思一样。如果登录名为NULL,则假设登录名为当前Linux用户的登录ID,如果密码为NULL,则假设密码为空。

port_number和unix_socket_name应该分别为0和NULL,除非你改变了MySQL安装的默认设置。他们将默认使用合适的值。

最后,flags参数用来对一些定义的位模式进行OR操作,使得改变使用协议的某些特性。

如果无法连接,则返回NULL。mysql_error函数可以提供有帮助的信息。

 

3. 使用完连接,通常在程序退出前,要调用函数mysql_close;

mysql_close的函数定义:

void mysql_close(MYSQL *connection);

将关闭连接。


连接MySQL的示例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "mysql.h"
  4.  
  5. int main (int argc, char *argv[]) {
  6.  
  7. MYSQL *conn;
  8.  
  9. // 步骤1: 初始化连接句柄
  10. conn = mysql_init(NULL);
  11.  
  12. if (conn == NULL) { // 如果返回NULl说明初始化失败
  13. printf("mysql_init failed!\n");
  14. return EXIT_FAILURE;
  15. }
  16.  
  17. // 步骤2:实际进行连接
  18. // 参数分别为,conn连接句柄,host是MySQL所在主机或地址,user用户名,password密码,database_name数据库名,后面的都是默认
  19. conn = mysql_real_connect(conn, "host", "user", "password", "database_name", 0, NULL, 0);
  20.  
  21. if (conn) { // 连接成功
  22. printf("Connection success!\n");
  23. } else {
  24. printf("Connection failed!\n");
  25. }
  26.  
  27. // 步骤3: 退出前关闭连接
  28. mysql_close(conn);
  29.  
  30. return 0;
  31. }

编译和运行:

gcc -I/usr/include/mysql test.c -L/usr/lib/mysql -lmysqlclient -o app

错误处理

 

错误处理的两个函数:

  1. // 返回错误码
  2. unsigned int mysql_errno(MYSQL *connection);
  3. // 返回错误详细信息
  4. char* mysql_error(MYSQL *connection);

注意,当调用conn = mysql_real_connect(...),  时会遇到一个问题,因为它在失败时返回NULL指针,并没有提供一个错误码。但如果是将句柄作为一个变量,那么即使mysql_real_connect失败,也仍然能够处理它。

#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
#include "errmsg.h"
#include "mysqld_error.h" void Error(MYSQL* conn)
{
printf("Connection error %d: %s\n", mysql_errno(conn), mysql_error(conn));
} int main (int argc, char *argv[])
{
MYSQL conn; // 是变量而不是指针
mysql_init(&conn); // 注意取地址符&
if (mysql_real_connect(&conn, "192.168.137.246", "root", "", "test", , NULL, ))
{
printf("Connection success!\n");
mysql_close(&conn);
} else
{
fprintf(stderr, "Connection failed!\n");
if (mysql_errno(&conn))
{
fprintf(stderr, "Connection error %d: %s\n", mysql_errno(&conn), mysql_error(&conn));
}
  }
  return EXIT_SUCCESS;
}

Linux下C语言连接MySQL的更多相关文章

  1. Linux下的C#连接Mysql数据库

    今天在尝试在 Linux 系统下使用C#连接数据库,发现网上这方面的信息很少,所以就写一篇博客记录一下. Linux下这里使用的是mono. 首先是缺少Mysql.Data.dll这个库的,所以需要安 ...

  2. Linux下C语言操作MySQL数据库

    MySQL是Linux系统下广泛使用的开源免费数据库,是Linux应用程序数据存储的首选. Ubuntu下安装 […]

  3. Linux centos 7/ubantu下: 用 C 语言连接 MySQL数据库

    前言:最近用IPC.socket做ATM.聊天项目,考虑到需要用到数据库,所以总结一下centos.ubantu环境下怎么用C语言操作数据库,例如常见的增删改查等! 一.Centos环境安装mysql ...

  4. Windows下用C语言连接Mysql注意问题

    原文:Windows下用C语言连接Mysql注意问题 环境是:在VS6.0 安装Mysql后,我们需要相应的头文件以及lib文件,所以安装过程必须是完整安装.否则不会生成include文件夹哦~ 具体 ...

  5. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

  6. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

  7. 在linux下安装并配置mysql数据库

    在linux下安装并配置mysql数据库 工具/原料   MySql5.6 CentOS 方法/步骤   1 查找以前是否安装有mysql,使用下面命令: rpm -qa|grep -i mysql ...

  8. c语言连接mysql数据库的实现方法

    C语言连接mysql数据库,需要相应的头文件和lib文件,如果你安装Mysql数据库,会在安装目录下找到这些库文件,如果没有安装,也可以在网上找到 我这里也有一份网上找到的:/201205/other ...

  9. R语言-连接MySQL数据库方法

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   R语言连接数据库常用的方法有2种: 1.使用R数据库接口 连接MySQL,使用RMySQL包,使用前RMySQL包要先安 ...

随机推荐

  1. BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】

    题目分析: 一个很显然的同类项合并.注意到p的大小最大为100,考虑把模p意义下相同的求出来最后所有的减去没有质数的做矩阵快速幂即可. 代码: #include<bits/stdc++.h> ...

  2. Game HDU - 3657(最小割)

    Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. 【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题

    题目描述 给出一个\(n\)行\(m\)列的矩阵\(A\), 保证满足以下性质: 1.\(m>n\). 2.矩阵中每个数都是\([0,n]\)中的自然数. 3.每行中,\([1,n]\)中每个自 ...

  4. 【HDU - 4345 】Permutation(DP)

    BUPT2017 wintertraining(15) #8F 题意 1到n的排列,经过几次置换(也是一个排列)回到原来的排列,就是循环了. 现在给n(<=1000),求循环周期的所有可能数. ...

  5. 【NOIP2018 Day1】题解

    T3 rp++; 今天题比较简单 而且考了很多嫌疑原题? 大家基本250+ 本蒟蒻...T3十分看脸 再次祝rp++; T1 积木大赛本赛嘛 如果d[i] < d[i - 1] ans += d ...

  6. Hdoj 2191.悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 题解

    Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品 ...

  7. [ZJOI2019]游记之我的第一次省选--自闭记

    2019/3/23 day -1 今天是体育中考....(祝我好运) 实心球再次投出测量范围,虽然成绩是10.5,但是目测有15米. 立定跳远2.70,好近,我爸叫我跳2.8的QwQ. 1000米最后 ...

  8. LOJ#6277. 数列分块入门 1

    分块思想,先把原来的序列分成根号n快,然后对于更新的部分,先操作这个序列边上的部分,然后再中间部分整块操作,这样复杂度就是O(根号N) #include<map> #include< ...

  9. centos7搭建ELK Cluster集群日志分析平台(一):Elasticsearch

    应用场景: ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构, 很多公司利用它来搭建可视化的海量日志分析平 ...

  10. linux防火墙,高级策略策略实例详解(实例一)

    双线服务器的控制问题: 要求:写出这个电信用户访问到双线web服务器时的IP变化过程(只写源IP,目标IP,和做SNAT还是DNAT等) 你觉得有没有问题? 实验环境: 精简一点可以使用下面的四台虚拟 ...