linux C连接mysql

时间:2022-01-15 23:40:24

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&plus;&plus; 连接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&plus;&plus;连接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. Google Authentication 机制原理

    Google Authenticator,谷歌身份认证器,Google公司推出的一款动态口令工具,旨在解决大家Google账户遭到恶意攻击的问题.该工具主要基于TOTP(Time-Based One- ...

  2. Linux获取线程tid线程名

    Linux获取线程tid线程名 1 2 3 4 5 6 //thread name char cThreadName[32] = {0}; prctl(PR_GET_NAME, (unsigned l ...

  3. Golang连接Oracle数据库

    Golang连接Oracle的库有很多,比较常见的如下: 不过,oralce 只提供了 oci8 的接口,必须通过它来调用,所以下面方案都逃不过相关设置. 1.go-db-oracle 地址: htt ...

  4. 设置AD用户属性

    设置AD用户属性proxyaddresses的值 $test01 = [adsi]"LDAP://cn=test01,ou=oo,ou=admins,dc=ddv,dc=com" ...

  5. query specified join fetching&comma; but the owner of the fetched association was not present in the select list

    报标题的错误,是因为在 select count的时候,不需要fetch 所以在取完count以后,再把fetch加进去,变成left join  fetch /** * 请把jhql以o为返回对象, ...

  6. Test Controller Tool

  7. HTML学习(七)表格

    表格表格由 <table> 标签来定义.每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> 标签定义).字母 td 指表格数据(ta ...

  8. JavaEE GenericServlet 解析

    从 上一篇 文章中可以看到,直接实现 Servlet 接口需要实现其所有方法,而这通常不是好的做法.相反,一种相对较好的做法是给出一个实现类来默认实现其所有方法或者部分方法,并开放给子类.而子类再在此 ...

  9. &period;Net Framework项目引用&period;NetStandard标准库出现版本冲突解决办法

    今天在工作中出现一个引用问题,害我找问题找了很久.起因是在一个Winform项目下需要引用一个.NetStandard标准库,标准库引用了System.ComponentModel.Annotatio ...

  10. Linux内核剖析(四)为arm内核构建源码树

    前面说到要做linux底层开发或者编写Linux的驱动,必须建立内核源码树,之前我们提到过在本机上构建源码树—-Linux内核剖析(三),其建立的源码树是针对i686平台的,但是我么嵌入式系统用的是a ...