本文出自   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. python+unnitest时运行后不执行main函数里面的内容

    1.使用工具pycharm运行unnitest程序遇到的问题 1) 问题:运行后无法生成报告:经print()发现未执行main函数里的内容 2) 原因:使用unnitest测试框架,pycharm运 ...

  2. python主流测试框架的简介

    1.python自动化的一些测试框架 1).unitest(也称为PyUnit)  地址:https://docs.python.org/2/library/unittest.html 2).Nose ...

  3. WC2019 划水记

    写在前面: 本篇是擅长咕咕咕的\(\text{BLUESKY007}\)同学难得不咕写的游记,将会记录\(WC2019(2019.1.24(Day\ 0)\sim2019.1.30(Day\ 6))\ ...

  4. linux deb系 rpm系 配置路由

    deb: 添加默认路由:route add default gw 8.46.192.1 添加网段路由:route add -net 8.46.0.0/19 gw 8.46.192.1 删除路由:把 a ...

  5. multiset和set

    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...

  6. 【mysql】工作中mysql常用命令及语句

    1.查看mysql版本号 MySQL [release_test_oa]> select version(); +------------+ | version() | +----------- ...

  7. pandas 轮询dataframe

    轮询有一个挺好的方式,df.iterrows() 这个函数同时返回 索引和行对象的生成器可以直接进行遍历. import pandas as pd df = pd.read_csv("dru ...

  8. Python学习day4 数据类型Ⅱ(列表,元祖)

    day4 知识补充&数据类型:列表,元祖 1.知识补充 1.编译型/解释型 编译型:在代码编写完成之后编译器将其变成另外一个文件教给你算计执行. 代表语言:Java,c,c++ ,c#, Go ...

  9. Zabbix历史数据清理

    特别提醒: a.文中测试的Zabbix版本为 3.0.3 . b.清理数据属于高危操作,请在测试环境中验证后再执行线上操作!!! 1.统计数据库中每个表所占的空间: mysql> SELECT ...

  10. ONI无法启动: Uh oh! Unable to launch Neovim...

    问题描述 在终端中是可以打开nvim的,ONI无法正确找到位置 解决方法 修改配置文件,指定nvim的路径 终端中输入which nvim定位所在位置,这里返回的结果是/usr/local/bin/n ...