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. Android学习笔记--远程服务的使用

    1.AIDL和Binder Android系统四大组件Activity, Content Provider, Broadcast和Service均可以进行跨进程数据传输. Activity可以隐式调用 ...

  2. 学习AJAX(一)

  3. iOS 面试基础题

    1.UIWindow和UIView和 CALayer 的联系和区别? 答:UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应 ...

  4. 1230.2——iOS准备(阅读开发者文档时的笔记)

    1.程序启动的过程    .在桌面找到相应的应用的图标 点击图标    .main函数 UIApplication类Every app has exactly one instance of UIAp ...

  5. 新浪授权认证(不用SDK)

    微博开放平台:http://open.weibo.com/ 微博开放接口的调用,如发微博.关注等,都是需要获取用户身份认证的.目前微博开放平台用户身份鉴权主要采用的是OAuth2.0.另外,为了方便开 ...

  6. C#中Dispose、析构函数、close的区别

    一.Close与Dispose这两种方法的区别 调用完了对象的Close方法后,此对象有可能被重新进行使用:而Dispose方法来说,此对象所占有的资源需要被标记为无用了,也就是此对象要被销毁,不能再 ...

  7. OpenCV——人脸检测

    OpenCV支持的目标检测的方法: 利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification) 1.加载级联分类器 CascadeClass ...

  8. (转) Class

    Classes are an expanded concept of data structures: like data structures, they can contain data memb ...

  9. C语言实现界面(不通过MFC\避免遗忘)

    感觉MFC不属于程序员细究的东西,今实现基本界面避免日后遗忘. 源代码: #include<windows.h>#include<stdio.h>char str[] = {' ...

  10. hdu1466 计算直线的交点数

    题意: 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数. 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). 分析: DP 设状态:f[i][j]表示i条直线能否产生j个 ...