zoukankan      html  css  js  c++  java
  • Linux下C语言连接MySQL

    本文出自   http://blog.csdn.net/shuangde800


    首先保证安装:
    1:安装MySQL:sudo apt-get install mysql-server mysql-client
    2:安装MySQL开发包:sudo apt-get install libmysqlclient15-dev
    此时需要用到的头文件会出现在/usr/include/mysql/里
     
     
     

    C语言连接MySQL数据库

    此包含两个步骤:
    1. 使用函数mysql_init初始化一个连接句柄结构.
    mysql_init的函数定义如下:
    MYSQL * mysql_init(MYSQL *);
    通常传递NULL给这个例程,他会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,它将会重新初始化。这个例程在出错时返回NULL.

     
    2. 实际进行连接
    目前只是分配和初始化了一个结构,仍然需要使用mysql_real_connect来向一个连接提供参数, 
    mysql_real_connect的函数定义:
    1. MYSQL* mysql_real_connect(MYSQL* connection,
    2. const char *server_host,
    3. const char *sql_user_name,
    4. const char *sql_password,
    5. const char *db_name,
    6. unsigned int port_number,
    7. const char *unix_socket_name,
    8. unsigned int flags);

    指针connection必须指向已经被mysql_init初始化过的结构。

    注意server_host既可以是主机名,也可以是IP地址。如果连接本地,可以制定localhost来优化。

    sql_user_name和sql_password的含义和它们的字面意思一样。如果登录名为NULL,则假设登录名为当前Linux用户的登录ID,如果密码为NULL,则假设密码为空。

    port_number和unix_socket_name应该分别为0和NULL,除非你改变了MySQL安装的默认设置。他们将默认使用合适的值。

    最后,flags参数用来对一些定义的位模式进行OR操作,使得改变使用协议的某些特性。

    如果无法连接,则返回NULL。mysql_error函数可以提供有帮助的信息。

     

    3. 使用完连接,通常在程序退出前,要调用函数mysql_close;

    mysql_close的函数定义:

     

    void mysql_close(MYSQL *connection);
    将关闭连接。


    连接MySQL的示例:

     

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include "mysql.h"
    4.  
    5. int main (int argc, char *argv[]) {
    6.  
    7. MYSQL *conn;
    8.  
    9. // 步骤1: 初始化连接句柄
    10. conn = mysql_init(NULL);
    11.  
    12. if (conn == NULL) { // 如果返回NULl说明初始化失败
    13. printf("mysql_init failed! ");
    14. return EXIT_FAILURE;
    15. }
    16.  
    17. // 步骤2:实际进行连接
    18. // 参数分别为,conn连接句柄,host是MySQL所在主机或地址,user用户名,password密码,database_name数据库名,后面的都是默认
    19. conn = mysql_real_connect(conn, "host", "user", "password", "database_name", 0, NULL, 0);
    20.  
    21. if (conn) { // 连接成功
    22. printf("Connection success! ");
    23. } else {
    24. printf("Connection failed! ");
    25. }
    26.  
    27. // 步骤3: 退出前关闭连接
    28. mysql_close(conn);
    29.  
    30. return 0;
    31. }

    编译和运行:
    gcc -I/usr/include/mysql test.c -L/usr/lib/mysql -lmysqlclient -o app
    


    错误处理

     

    错误处理的两个函数:

     

    1. // 返回错误码
    2. unsigned int mysql_errno(MYSQL *connection);
    3. // 返回错误详细信息
    4. char* mysql_error(MYSQL *connection);
    注意,当调用conn = mysql_real_connect(...),  时会遇到一个问题,因为它在失败时返回NULL指针,并没有提供一个错误码。但如果是将句柄作为一个变量,那么即使mysql_real_connect失败,也仍然能够处理它。
    #include <stdio.h>
    #include <stdlib.h>
    #include "mysql.h"
    #include "errmsg.h"
    #include "mysqld_error.h"
    
    void Error(MYSQL* conn) 
    {
        printf("Connection error %d: %s
    ", mysql_errno(conn), mysql_error(conn));
    }
    
    
    int main (int argc, char *argv[]) 
    {
        MYSQL conn; // 是变量而不是指针
        mysql_init(&conn); // 注意取地址符&
        if (mysql_real_connect(&conn, "192.168.137.246", "root", "123456", "test", 0, NULL, 0)) 
        {
            printf("Connection success!
    ");
            mysql_close(&conn);
        } else 
        {
            fprintf(stderr, "Connection failed!
    ");
            if (mysql_errno(&conn)) 
            {
                fprintf(stderr, "Connection error %d: %s
    ", mysql_errno(&conn), mysql_error(&conn));
            }
      }
      return EXIT_SUCCESS;
    }
  • 相关阅读:
    MySQL常用函数大全讲解
    mysql 获取最近一个月每一天
    Mysql查询某个月的每一天的数据
    Mysql 查询一天中,每个小时数据的数量
    oracle 和 mysql 遍历当前月份每一天
    sql查询总结
    Qt样式表——选择器详解(父子关系,插图详细解释)
    Qt样式表之盒子模型(以QSS来讲解,而不是CSS)
    程序员晋升必备技能——单元测试框架(小豆君的干货铺)
    为什么川普反对中国补贴农业(渐进式发展是非常正确的,如果贸然改动农村土地制度,在城市还不能提供足够的就业岗位下将大量的农民推向城市……请欣赏一下巴西、印度城市的贫民窟)
  • 原文地址:https://www.cnblogs.com/schips/p/10655252.html
Copyright © 2011-2022 走看看