linux 环境下C语言连接数据库首先要配置环境

1,确定你的linux下安装mysql我们可以做个测试。

  打开你的终端,在终端下输入:service mysqld status

  [root@bogon ~]# service mysqld status
  mysqld 已停止

  说明你的mysql服务还没打开,不用害怕,在终端中输入

  [root@bogon ~]# service mysqld start
  启动 MySQL:                                               [确定]
  Ok你的mysql已经可以使用了。

  [root@bogon ~]# service mysqld status
  mysqld (pid 3873) 正在运行...

  现在可以使用数据库了。

  [root@bogon ~]# mysql
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 2
  Server version: 5.0.45 Source distribution
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  mysql>
     查看系统中已创建的数据库,输入命令:show databases

  mysql> show databases;
  +--------------------+
  | Database             |
  +--------------------+
  | information_schema |
  | data                        |
  | mysql                      |
  | test                    |
  +------------------------+
  4 rows in set (0.02 sec)
  使用以创建的数据库

  mysql> use test
  Database changed
  mysql>

  查看数据库test下的表

  mysql> show tables;
  +----------------+
  | Tables_in_test |
  +----------------+
  | product        |
  +----------------+
  1 row in set (0.00 sec)

  啰嗦了这么多,就是为了说后期的测试都是在product表上测试的,

  好了,现在切入正题,就以我的代码为例吧!

2.代码名为 connect1.c

连接数据库。
    从C语言连接MySQL数据库包含两个步骤:
    a)初始化连接句柄结构;
    b)实际创建连接。
    首先使用mysql_init初始化连接句柄:
       MYSQL * mysql_init (MYSQL *);
    通常传递一个空指针给mysql_init这个函数,它会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,他将被重新初  始化。如果出错,返回NULL。
    初始化成功后,则使用mysql_real_connect来创建一个实际的连接:
     MYSQL * mysql_real_connect(MYSQL * connection,
                      const char * server_host,
                      const char * sql_user_name,   
                      const char * sql_password,
                      const char *db_name,
                      unsigned int port_number,
                      const char * unix_socket_name,
                      unsigned int flags
       );

  connection必须是已经初始化的连接句柄结构,server_host可以是主机名,也可以是IP地址,如果仅仅连接到本机,可以使用         localhost来优化连接类型。port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认 设置。
     如果无法连接,返回NULL。完成连接后,在程序正常退出前,应该使用mysql_close关闭这个连接句柄。
      void mysql_close(MYSQL * connection);
     现在我们试图调用以上函数来建立一个对以上已经建好的数据库的访问,程序为connect1.c。内容如下:

  #include <stdlib.h>
  #include <stdio.h>
  #include "mysql.h"

  int main (int argc, char *argv[])
  {
          MYSQL *conn_ptr;
          conn_ptr=mysql_init(NULL); //连接初始化
          if(!conn_ptr){
              fprintf(stderr, "mysql_init failed\n");
              return EXIT_FAILURE;
      }

conn_ptr = mysql_real_connect(conn_ptr, "localhost", "root","","test", 0, NULL, 0); //建立实际连接
        //参数分别为:初始化的连接句柄指针,主机名(或者IP),用户名,密码,数据库名,0,NULL,0)后面三个参数在默认安装      mysql>的情况下不用改
        if(conn_ptr){
                printf("Connection success\n");
                }
        else {
                printf("Connection failed\n");
        }

mysql_close(conn_ptr); //关闭连接
        return EXIT_SUCCESS;
  }

我们可以试着运行:

然后编译:
  #gcc -I/usr/include/mysql connect1.c -lmysqlclient -o connect1
      connect1.c:4:19: 错误:mysql.h:没有那个文件或目录
     提示是没有找到mysql.h,产生这个错误的原因是没有mysql.h文件,它在mysql-devel包中,需要安装这个包:
       sudo yum install mysql-devel -y
     然后找一下:
      #locate mysql.h
       /usr/include/mysql/mysql.h
     这样就可以找到这个头文件了(-I的含义是在指定位置搜索头文件,参见man gcc)。再次尝试编译:
      # gcc -I/usr/include/mysql connect1.c -lmysqlclient -o connect1
      /usr/bin/ld: cannot find -lmysqlclient
      collect2: ld 返回 1
     链接库有问题,找不到mysqlclient链接库,man gcc发现可以在后面用-L指定搜索位置,于是我们先找到mysqlclient库的位置:
      locate *mysqlclient*
      /usr/lib/mysql/libmysqlclient.a
      /usr/lib/mysql/libmysqlclient.so
      /usr/lib/mysql/libmysqlclient.so.15
      /usr/lib/mysql/libmysqlclient.so.15.0.0
      /usr/lib/mysql/libmysqlclient_r.a
      /usr/lib/mysql/libmysqlclient_r.so
      /usr/lib/mysql/libmysqlclient_r.so.15
      /usr/lib/mysql/libmysqlclient_r.so.15.0.0
    这样找到位置就可以编译了:
      gcc -I/usr/include/mysql connect1.c -lmysqlclient -L/usr/lib/mysql -o connect1
    编译成功,于是就可以运行了,在此之前,确保mysqld已经在运行了:
    sudo /etc/rc.d/init.d/mysqld restart
    然后执行生成的可执行文件:
    ./connect1
    Connection success

 到此为止已成功连接到数据库!

打印出了我们设计好了的连接成功的打印信息。这样就通过C语言进入了MySQL数据库了。

##########################################
    #在以上这一段编译这个connect1.c的文件过程了,出过两次错误,分别记录如上,看起来 #
    #解决的办法很简单,但是自己当时确实是很迷茫,不知什么原因,网上搜索的结果大都不得#
    #要领,最终还是靠自己静下心来看gcc的手册,man gcc才解决。                               #
    #P.S. man gcc真长。 要冷静!                                                            #
    ##########################################

下面我们就可以对数据库进行操作了,典型的四个操作——增删查改。

见下一篇博客!!!

linux C连接mysql的更多相关文章

  1. Delphi能通过SSH登录Linux,连接MYSQL取数么?像Navicat一样

    百度随时就能搜,你就懒得搜下.http://tieba.baidu.com/p/671327617 Ssh tunnel通常能实现3种功能1) 加密网络传输2) 绕过防火墙3) 让位于广域网的机器连接 ...

  2. linux远程连接mysql数据库

    在linux系统中,远程连接mysql数据库时不仅需要开启ip访问,还需要将防火墙中添加相应规则 在wdlinux中的[安全管理]菜单下选择[防火墙[iptables]]选项,增加端口为3306的规则 ...

  3. linux c++ 连接mysql 数据库

    Mysql是数据库中的主流,因此我一直以为在Linux下配置会很很容易,结果Google了大半天,大部分网页只说了如何安装Mysql之类的废话,对如何使用C/C++连接Mysql却只字不提,或者提的方 ...

  4. Linux中连接mysql执行sql文件

    数据量小的时候可以把sql语句内容粘贴执行,但是文件很大的时候,这样执行效率很慢很慢,需要使用source执行sql文件 1.客户端连接mysql数据库 [root@iZbp1bb2egi7w0uey ...

  5. 在 linux 中连接 mysql 数据库

    命令格式 mysql -h主机地址 -u用户名 -p用户密码 登录本机 mysql mysql -u用户名 -p用户密码 实例 TD - X1数据库:/opt/lampp/bin/mysql -u r ...

  6. linux c++连接mysql编译问题

  7. tomcat通过socket连接MySQL,不再占用服务端口【linux】

    MySQL连接方式的说明 http://icbm.iteye.com/blog/1840673 MySQL除了最常见的TCP连接方式外,还提供SOCKET(LINUX默认连接方式).PIPE和SHAR ...

  8. Linux 命令之 Navicat 连接 Linux 下的Mysql数据库

    2016年12月7日18:44:06 -====------------------------  GRANT ALL PRIVILEGES ON *.* TO 'itoffice'@'%' IDEN ...

  9. Linux系统下 解决Qt5无法连接MySQL数据库的方法

    Linux平台下解决Qt5连接mysql数据库的问题:输入sudo apt-get install libqt5sql5-mysql解决,这种方法只能解决Qt是用sudo apt-get instal ...

随机推荐

  1. 虚拟机设备直通的两种方式(Working in Progress)

    声明: 本博客欢迎转发.但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! pci passthroug ...

  2. Git 笔记一 Git简介

    git 笔记一 什么是版本控制 所谓版本控制就是记录对文件的修改记录,这样以后就能回退到需要的 版本.比如你对一段代码进行了几次修改,有几次修改不想要了,如果 使用了版本控制,就可以回退到未做这些修改 ...

  3. spring aop获取目标对象的方法对象(包括方法上的注解)

    这两天在学习权限控制模块.以前看过传智播客黎活明老师的巴巴运动网视频教程,里面就讲到权限控制的解决方案,当时也只是看看视频,没有动手实践,虽说看过几遍,可是对于系统中的权限控制还是很迷茫,所以借着这次 ...

  4. ios 获取屏幕的属性

    屏幕尺寸     CGRect screen = [UIscreen mainScreen].bounds 状态栏尺寸  CGRect rect = [[UIApplication sharedApp ...

  5. HttpURLConnection详解

    HttpURLConnection详解 07. 五 / J2EE / 没有评论   HttpURLConnection类的作用是通过HTTP协议向服务器发送请求,并可以获取服务器发回的数据. Http ...

  6. spring2.5IOC控制反转详解

    spring2.5IOC控制反转详解 19. 五 / J2EE / 一条评论   基本的代码结构 1 IOC包下 基本的spring创建对象 将类添加到配置文件中,由容器创建. Source code ...

  7. python-整理-vs2013新建文件编码

    使用VS2013新建py包和py空文件还有文本文件时发现编码是936.如果代码中写了中文关闭后再打开就乱码了. 找了几个小时,发现模板文件就是936编码,奇怪的是pyclass等其它模板是正常的UTF ...

  8. gulp压缩js

    1.安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 -> 配置gulpfile.js -> 运行任务 2.查看nodejs的版本号 3.npm ...

  9. setAdapter(adapter)空指针nullPointer 解决办法

    setAdapter(adapter)空指针nullPointer 解决办法 (2014-06-13 10:01:23) 转载▼ 标签: 旅游 分类: Android开发 如果setAdapter报空 ...

  10. codecomb 2092【课程选择】

    题目描述 大学选课总是烦恼着很多人.现在X同学选出了很多备选课,但是有的课程之间是有时间冲突的.X不会分身,自然无法在同一个时间上不同的课.每个课可能有很多备选时间,但是每个课只需要选一个时间上就可以 ...