mysqlAPI实例

来源:互联网 发布:软件招标网 编辑:程序博客网 时间:2024/05/01 01:31
1)查找libmysqlclient库在什么地方:find / -name "libmysqlclient.*" 
   并获取其路径 // /usr/lib64/mysql/libmysqlclient.a

2)查看放mysql.h的目录:cd  /usr/include/mysql/     ls

3)编译:
 
gcc dm01_hello.c -o dm01_hello -I/usr/include/mysql/ -L/usr/lib64/mysql/ -lmysqlclient -ldl -lstdc++  -lm -lrt  -lpthread;


一、API基本操作

1)初始化MYSQL句柄:MYSQL *mysql_init();

2)连接数据库:MYSQL *mysql_real_connect( ... );

3)执行SQL语句:int mysql_query(MYSQL *mysql, const char *query)

4)关闭连接:void mysql_close();

5)中文乱码问题:mysql_query(mysql, "set names utf8");



查询案例

代码:

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

int main()
{
    MYSQL *mysql=NULL;
    int ret,i;

    //初始化
    mysql=mysql_init(NULL);
    if(mysql==NULL)
    {
        printf("mysql_init error:%s\n",mysql_errno(mysql));
        exit(1);
    }

    printf("init ok.....\n");

    //连接
    mysql=mysql_real_connect(mysql, "127.0.0.1", "root", "123456","mydb61", 0, NULL,0);
    if(mysql==NULL)
    {
        printf("mysql_real_connect error:%s\n",mysql_errno(mysql));
        exit(1);
    }

    printf("mysql_real_connect ok.....\n");

    //执行SQL语句
    //int mysql_query(MYSQL *mysql, const char *query)

    char *query="select *from emp";
    ret=mysql_query(mysql, query);
    if(ret!=0)
    {
        printf("mysql_query error:%s\n",mysql_errno(mysql));
        exit(1);
    }
    //获取列
    //unsigned int mysql_field_count(MYSQL *mysql)
    int count =mysql_field_count(mysql);

    //获取结果集
    //MYSQL_RES *mysql_store_result(MYSQL *mysql)
    MYSQL_RES *result =mysql_store_result(mysql);
    if(result==NULL)
    {
        printf("mysql_store_result error:%s\n",mysql_errno(mysql));
        exit(1);
    }
    //打印表头
    //MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)
    MYSQL_FIELD *fields;

    fields = mysql_fetch_fields(result);
    for(i = 0; i < count; i++)
    {
       printf("%s\t",fields[i].name);
    }
    printf("\n");
    //解析结果集
    //MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
    MYSQL_ROW row;
    while ((row = mysql_fetch_row(result)))
    {
        for(i = 0; i < count; i++)
        {
           printf("%s\t",row[i]);
        }
        printf("\n");

    }
    //释放结果集
    //void mysql_free_result(MYSQL_RES *result)
    mysql_free_result(result);

    //关闭
    mysql_close(mysql);

    return 0;
}


二、多语句执行

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

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <termios.h>
#include <mysql/mysql.h>

void process_result_set(MYSQL *mysql, MYSQL_RES *result)  // 打桩
{
    int i = 0;
    int num = 0;
    num = mysql_field_count(mysql); //获取列
    // 表头
    MYSQL_FIELD *fields;

    //num_fields = mysql_num_fields(result);
    fields = mysql_fetch_fields(result);//返回表头字段
    for (i = 0; i < num; i++)
    {
       printf("%s\t", fields[i].name);
    }
    printf("\n");


    MYSQL_ROW row = NULL;
    while (row =mysql_fetch_row(result) )//解析结果集
    {
        // 多少列
        for (i=0; i<num; i++)
        {
            printf("%s\t", row[i]);
        }
        printf("\n");
    }
    printf("\n");

}

int main(int arg, char *args[])
{
    int             ret = 0, i=0, status = 0;
    MYSQL             *mysql;

    MYSQL_RES         *result;
    MYSQL_ROW        row;
    MYSQL_FIELD     *fields;
    unsigned int     num_fields;

    mysql = mysql_init(NULL);
    if (mysql == NULL)
    {
        ret =  mysql_errno(mysql) ;
        printf("connect error, %s\n", mysql_error(mysql));
        goto END;
    }

    //连接到mysql server
    mysql = mysql_real_connect(mysql, "localhost", "root", "123456", "mydb61", 0, NULL,  CLIENT_MULTI_STATEMENTS);
    if (mysql == NULL)
    {
        ret =  mysql_errno(mysql) ;
        printf("connect error, %s\n", mysql_error(mysql));
        goto END;
    }

    ///////

    /* execute multiple statements */
    status = mysql_query(mysql,
                         "DROP TABLE IF EXISTS test_table;\
                         CREATE TABLE test_table(id INT);\
                         INSERT INTO test_table VALUES(10);\
                         UPDATE test_table SET id=20 WHERE id=10;\
                         SELECT * FROM test_table;\
                         DROP TABLE test_table");//实验时注意注释删除表的语言
    if (status)
    {
         printf("Could not execute statement(s)");
         mysql_close(mysql);
         exit(0);
    }
    /* process each statement result */
    do {
         /* did current statement return data? */
         result = mysql_store_result(mysql);////获取结果集
         if (result)  //是select语言
         {
             /* yes; process rows and free the result set */
             process_result_set(mysql, result);  // 打桩
             mysql_free_result(result);//释放结果集
         }
         else /* no result set or error */  //非select语言
         {
             if (mysql_field_count(mysql) == 0)////获取列,如果列为0
             {
                 printf("%lld rows affected\n",
                 mysql_affected_rows(mysql));//返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数
             }
             else /* some error occurred */
             {
                 printf("Could not retrieve result set\n");
                 break;
             }
         }
         /* more results? -1 = no, >0 = error, 0 = yes (keep looping) */
         if ((status = mysql_next_result(mysql)) > 0)//在多语句执行过程中返回/初始化下一个结果
             printf("Could not execute statement\n");
    } while (status == 0);

END:       
    if (mysql != NULL)
     mysql_close(mysql);        //断开与SQL server的连接


    return 0;
}






























0 0
原创粉丝点击