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. Guava源码分析——ServiceManager

    ServiceManager类:      用于监控服务集的管理器,该类提供了诸如startAsync.stopAsync.servicesByState方法来运行.结束和检查服务集,而且,通过监听器 ...

  2. BOOST 线程完全攻略 - 扩展 - 线程消息通讯

      // controlled_module_ex.hpp : controlled_module类的扩展 // 增强线程之间消息通讯 // 增加线程安全启动和安全关闭功能 // 增加定时器功能 #p ...

  3. [Spring入门学习笔记][Spring Boot]

    什么是Spring Boot Spring Boot正是在这样的一个背景下被抽象出来的开发框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...

  4. 线程:CyclicBarrier同步工具类

    一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点.比如公司组织活动出去玩,需要在公司门口一起搭车去.每个人从家里出发去公司门口,到达的时间肯定先后不一样,所以公司的车要一直等待,等所有人 ...

  5. android——混淆打包

    网上搜了一大堆,在此不一一赘诉. 直接讲解了 如上图这么配置,其实就是加上一句话而已.告诉打包工具混淆打包的代码放在./proguard-project.txt这里 proguard.config=. ...

  6. document.write 存在几个问题?应该注意

    document.write (henceforth DW) does not work in XHTML XHTML 不支持 DW executed after the page has finis ...

  7. 一些不熟悉的SQL脚本--约束条件

    1.根据表名查询主键的SQL语句 SELECT D.COLUMN_NAME AS COLNAME FROM USER_CONS_COLUMNS D, USER_CONSTRAINTS M WHERE ...

  8. alloc & init & dealloc

    在Objective-C中,alloc,init和dealloc是经常使用的函数,那么它们内部到底是如何实现的呢?通过查看libobjc运行时库,可以发现他们的工作原理. 1 alloc alloc的 ...

  9. 通过startup启动tomcat一闪而过的问题

    下载了免安装版的tomcat7,在通过startup.bat启动时,控制台一闪而过.记事本讲startup.bat打开,在最后一行加上pause,然后重新双击startup.bat,发现控制台打印的错 ...

  10. 表单提交---前端页面模拟表单提交(form)

    有些时候我们的前端页面总没有<form></form>表单,但是具体的业务时,我们又必须用表单提交才能达到我们想要的结果,LZ最近做了一些关于导出的一些功能,需要调用浏览器默认 ...