Linux下C语言连接MySQL

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

前提条件

首先保证环境已经安装好:ubuntu平台下MySQL的环境搭建

此时需要用到的头文件会出现在/usr/include/mysql/里。

C语言连接MySQL数据库

1)使用函数mysql_init初始化一个连接句柄结构

mysql_init的函数定义如下:

MYSQL * mysql_init(MYSQL *);  

通常传递NULL给这个例程,它会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,它将会重新初始化。这个例程在出错时返回NULL。

2)实际进行连接
目前只是分配和初始化了一个结构,仍然需要使mysql_real_connect来向一个连接提供参数。

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必须指向已经被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的示例

#include <stdio.h>  
#include <stdlib.h>  
#include <mysql.h>

int main (int argc, char *argv[])
 {  

    MYSQL *conn;  

    // 步骤1: 初始化连接句柄  
    conn = mysql_init(NULL);  

    if (conn == NULL) { // 如果返回NULl说明初始化失败  
        printf("mysql_init failed!\n");   
        return EXIT_FAILURE;  
    }  

    // 步骤2:实际进行连接  
    // 参数分别为,conn连接句柄,host是MySQL所在主机或地址,user用户名,password密码,database_name数据库名,后面的都是默认  
    conn = mysql_real_connect(conn, "host", "user", "password", "database_name", 0, NULL, 0);  

    if (conn) { // 连接成功  
        printf("Connection success!\n");      
    } else {  
        printf("Connection failed!\n");   
    }  

    // 步骤3: 退出前关闭连接  
    mysql_close(conn);  

    return 0;  
}  

编译和运行:

gcc -I/usr/include/mysql test.c -L/usr/lib/mysql -lmysqlclient -o app  

这里写图片描述

错误处理

错误处理的两个函数:

// 返回错误码  
unsigned int mysql_errno(MYSQL *connection);  
// 返回错误详细信息  
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\n", 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!\n");  
        mysql_close(&conn);  
    } else {  
        fprintf(stderr, "Connection failed!\n");  
        if (mysql_errno(&conn)) {  
            fprintf(stderr, "Connection error %d: %s\n", mysql_errno(&conn), mysql_error(&conn));  
        }  
    }  
    return EXIT_SUCCESS;  
}  
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值