MySQL C API的一些示例

MySQL C API连接数据库

MySQL官方文档下载地址PDF版本

连接MySQL数据库

  1. mysql_library_init()
    一般使用形式: mysql_library_init(0, NULL, NULL); 返回 0表示调用成功,非0表示调用失败。

  2. mysql_init()
    一般调用形式:MYSQL *mysql = mysql_init(mysql); 调用成功返回非NULL,在内存不足的时候会返回NULL。或者 MYSQL mysql; mysql_init(&mysql);

  3. mysql_options()
    设置连接属性,在mysql_init调用之后,在mysql_connect或者mysql_real_connect之前,可以调用多次来为连接设置多个属性。支持设置的属性可前MySQL官网仔细查看。

  4. mysql_real_connect()
    原型:MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)

  5. 示例程序

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

int main()
{
   
    if (mysql_library_init(0, NULL, NULL)) //在所有线程对MYSQL C API调用之前调用
    {
   
        perror("mysql_library_init error");
        exit(-1);
    }
    
    MYSQL mysql;
    mysql_init(&mysql);  //初始化MYSQL句柄

    unsigned int timeout = 3000;
    mysql_options(&mysql, MYSQL_OPT_CONNECT_TIMEOUT, &timeout);   //设置超时

    if (!mysql_real_connect(&mysql, "localhost", "root", "123", "test", 0, NULL, 0)) //连接
    {
   
        perror("mysql_real_connect error\n");
        mysql_error(&mysql);
    }
    else
    {
   
        printf("mysql_real_connect success\n");                                                                                                                                                            
    }

    mysql_close(&mysql); //关闭连接
    mysql_library_end(); //释放占用的资源
}

  1. 编译
    gcc link.c -o link -lmysqlclient

  2. 运行
    输出

mysql_real_connect success
  1. 一些注意点
    mysql_library_init()在非多线程环境中可以省略对它的调用,mysql_init()会在必要的时候自动调用mysql_library_init(),但请注意,我们必须在关闭连接后显式的调用mysql_library_end()来释放资源,否则会有内存泄露的可能。
    mysql_library_init是非线程安全(not thread-safe)的,在多线程环境中,要确保这个API的调用在所有其他MySQL C API的调用之前,一般呢,就写在主线程里面,作为程序初始化的一个工作,然后在子线程中首先调用mysql_thread_init()来确保线程安全,再进行后续的操作。或者使用一个锁进行同步。
    mysql_real_connect是一个同步函数,它的异步副本是mysql_real_connect_nonblocking(),需要与服务器异步通信的程序应该调用后者。

使用MySQL C API来查询数据

  1. mysql_real_query()
    原型:int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)
    一般调用形式:mysql_real_query(&mysql, “select col from table”, length);SQL语句最后不带分号结束符(;)或者 \g。支持多语句执行,详情请参见官网。返回0表示调用成功,非0值表示调用失败,可以调用mysql_error来获取错误类型。官网描述了四种错误:CR_COMMANDS_OUT_OF_SYNC(语法错误?)、CR_SERVER_GONE_ERROR(数据库服务器已经消失)、CR_SERVER_LOST(在查询过程中与服务器的连接丢失)、CR_UNKNOWN_ERROR(未知的错误)。mysql_query()和mysql_real_query之间的区别在于,mysql_query不能用于包含二进制数据的语句,而mysql_real_query可以,这里推荐使用后者,不必为数据是否包含二进制而烦恼。
  2. mysql_store_result
    原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)
    一般调用形式: MYSQL_RES *result = mysql_store_result(&mysql);在调用mysql_real_query()之后,可以调用mysql_store_result()或者mysql_use_result()来获取执行语句(SELECT语句、SHOW、DESCRIBE、EXPLAIN、CHECK_TABLE等)的结果集,可以通过判定mysql_store_result()是否返回非零值来检测该语句是否有结果集。如果使用了多语句执行,则应通过循环调用mysql_next_result()来确定是否还有更多的结果集。result需要显示调用mysql_free_result来释放掉。
  3. mysql_field_count
    原型: unsigned int mysql_field_count(MYSQL *mysql) ;
    一般调用形式:mysql_field_count(&mysql);此函数的正常使用是当mysql_store_result()返回NULL时,调用mysql_field_count()来确定mysql_store_result()是否应该产生非空结果,以便客户端程序可以采取适当措施。
  4. mysql_num_fields
    原型: unsigned int mysql_num_fields(MYSQL_RES *result) ;
    一般调用形式:mysql_num_fields(result);返回结果集中的行数&
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值