数据库操作API(C)

MySQl基于C语言API

  1. MYSQL
    该结构代表数据库的连接句柄,要建立与MySQL数据库的连接,必须创建MYSQL的句柄实例。
  2. MYSQL_RES
    该结构代表返回行的查询结果。将查询返回的信息称为"结果集"。
  3. MYSQL_ROW
    这是一行数据的"类型安全"表示,它指向含有一行数据的字符串数组。行可以通过调用mysql_fetch_row()函数获得。
  4. MYSQL_FIELD
    该结构包含字段的信息,如字段名、类型和大小。

连接MySQL数据库

C语言实现对数据库的连接,需要执行两步。

初始化MySQL的连接句柄

在连接MySQL数据库服务器之前,首先调用mysql_init()函数以初始化一个连接句柄。若创建成功,则返回一个新创建的连接句柄的指针;否则返回NULL。
函数原型如下:
MYSQL *mysql_init(MYSQL *)

实际连接数据库

在调用mysql_init()函数初始化MySQL连接句柄之后,调用mysql_real_connect()函数实际进行与MySQL服务器的连接。
如果连接成功,则返回MYSQL连接句柄的指针;如果连接失败,则返回NULL。

在初始化后和实际连接数据库之前,可以调用mysql_options()函数来进行选项设置。该函数一次只能设置一个选项,所以可以多次调用调用该函数。如果选项设置成功,则返回0,如果使用类未知选项,则会设置失败,返回非0值。

当用户完成对数据库的一系列操作之后,在退出程序之前,需要调用mysql_close()函数来关闭对MySQL数据库的连接。
myslq_close()函数原型如下:
void mysql_close(MYSQL * mysql);

#include 
#include "mysql/mysql.h"

int main()
{
    MYSQL mysql;    // need a instance to init
    int t, r;
    mysql_init(&mysql);

    if (!mysql_real_connect(&mysql, "172.17.0.2", "root", "xxxxxx", "moddemod", 3306, NULL, 0))
    {
        printf("Error connecting to database: %s\n", mysql_error(&mysql));
    } else {
        printf("Connected MySQL successfully!\n");

    }
    mysql_close(&mysql);
    return 0;
}

编译:

gcc -o con main.c -I /usr/include/mysql -L /usr/lib/mysql -l mysqlclient

查询数据库函数

成功连接MySQL数据库以后,就可以对数据库进行查询操作了。在MySQL API函数中,提供类两个数据库查询函数,函数的原型分别如下:

int mysql_query(MYSQL * mysql, const char *query);
int mysql_real_query(MYSQL * mysql, const char *query, unsigned long length);

mysql_real_query()辅助函数的及其用法

mysql_store_result() 将查询的全部结果读取到客户端。查询数据库成功以后,必须调用mysql_store_result()或mysql_use_result()函数

mysql_num_fields() 返回结果集中的函数

mysql_fetch_row() 检索结果集的下一行

#include 
#include 
#include "mysql/mysql.h"

int main()
{
    MYSQL mysql;
    MYSQL_RES *res;
    MYSQL_ROW row;
    char *query;
    int flag, r;    // connect the database
    mysql_init(&mysql);
    if (!mysql_real_connect(&mysql, "localhost", "root", "xxxxxx", "moddemod", 3306,NULL, 0))
    {
        printf("Failed to connect to MySQL!\n");
        return 1;
    }
    printf("Connected MySQL successfully!\n");
    query = "select * from flag";   // query
    flag = mysql_real_query(&mysql, query, (unsigned int)strlen(query));
    if (flag)   // !0 failed
    {
        printf("query failed!\n");
        return 1;
    }
    printf("[%s] made...\n", query);
    res = mysql_store_result(&mysql);   // save result
    while (row = mysql_fetch_row(res))
    {
        for (int i = 0; i < mysql_num_fields(res); ++i)
        {
            printf("%s ", row[i]);
        }
        printf("\n");
    }
    mysql_close(&mysql);
    return 0;
}



你可能感兴趣的:(Linux)