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. 成语接龙(dfs)

    成语接龙 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 92(17 users) Total Accepted: 23(14 user ...

  2. hadoop备战:一台x86计算机搭建hadoop的全分布式集群

    主要的软硬件配置: x86台式机,window7  64位系统 vb虚拟机(x86的台式机至少是4G内存,才干开3台虚机) centos6.4操作系统 hadoop-1.1.2.tar.gz jdk- ...

  3. poj1036-dp

    http://poj.org/problem?id=1036 题目分析: 由题目很容易就能想到这道题目是DP题目. 当然,它的DP方程也不难得到: 定义状态:d[i,j] 表示在时间t=i且门状态为j ...

  4. Android Studio 导入Eclipse工程

    eclipse:workspace对应多个project:而android studio是project对应多个module:故,在android studio中的工程project实际上是eclip ...

  5. C#设置程序自启动

    public static void SetAutoRun(string fileName, bool isAutoRun)        {            RegistryKey reg = ...

  6. .net 地址栏传中文乱码 的解决方法

    1.设置web.config文件. <system.web> ...... <globalization requestEncoding="gb2312" res ...

  7. PHP学习笔记十六【方法】

    <?php //给一个函数传递基本数据类型 $a=90; $b=90.8; $c=true; $d="hello world"; function test1($a,$b,$ ...

  8. iOS开发 ~应用程序设计理念:视图控制器(UIViewController)、视图(UIView)

    应用程序设计理念:视图控制器(UIViewController).视图(UIView) 利用视图控制器(底层)管理视图(外观),一对一 1.视图的作用:负责显示的外观 2.视图控制器的作用:创建界面. ...

  9. ConcurrentQueue对列的基本使用方式

    队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队. ConcurrentQueue< ...

  10. POI操作Excel常用方法总结

    转载自:http://blog.csdn.net/xjun15/article/details/5805429 一. POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提 ...