• 转 用C API 操作MySQL数据库


    用C API 操作MySQL数据库

    参考MYSQL的帮助文档整理

    这里归纳了C API可使用的函数,并在下一节详细介绍了它们。请参见25.2.3节,“C API函数描述”。

    函数

    描述

    mysql_affected_rows(): 返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。

    mysql_autocommit(): 切换 autocommit模式,ON/OFF

    mysql_change_user(): 更改打开连接上的用户和数据库。

    mysql_charset_name(): 返回用于连接的默认字符集的名称。

    mysql_close(): 关闭服务器连接。

    mysql_commit(): 提交事务。

    mysql_connect(): 连接到MySQL服务器。该函数已不再被重视,使用mysql_real_connect()取代。

    mysql_create_db(): 创建数据库。该函数已不再被重视,使用SQL语句CREATE DATABASE取而代之。

    mysql_data_seek(): 在查询结果集中查找属性行编号。

    mysql_debug(): 用给定的字符串执行DBUG_PUSH。

    mysql_drop_db(): 撤销数据库。该函数已不再被重视,使用SQL语句DROP DATABASE取而代之。

    mysql_dump_debug_info(): 让服务器将调试信息写入日志。

    mysql_eof(): 确定是否读取了结果集的最后一行。该函数已不再被重视,可以使用mysql_errno()或mysql_error()取而代之。

    mysql_errno(): 返回上次调用的MySQL函数的错误编号。

    mysql_error(): 返回上次调用的MySQL函数的错误消息。

    mysql_escape_string(): 为了用在SQL语句中,对特殊字符进行转义处理。

    mysql_fetch_field(): 返回下一个表字段的类型。

    mysql_fetch_field_direct(): 给定字段编号,返回表字段的类型。

    mysql_fetch_fields(): 返回所有字段结构的数组。

    mysql_fetch_lengths(): 返回当前行中所有列的长度。

    mysql_fetch_row(): 从结果集中获取下一行

    mysql_field_seek(): 将列光标置于指定的列。

    mysql_field_count(): 返回上次执行语句的结果列的数目。

    mysql_field_tell(): 返回上次mysql_fetch_field()所使用字段光标的位置。

    mysql_free_result(): 释放结果集使用的内存。

    mysql_get_client_info(): 以字符串形式返回客户端版本信息。

    mysql_get_client_version(): 以整数形式返回客户端版本信息。

    mysql_get_host_info(): 返回描述连接的字符串。

    mysql_get_server_version(): 以整数形式返回服务器的版本号。

    mysql_get_proto_info(): 返回连接所使用的协议版本。

    mysql_get_server_info(): 返回服务器的版本号。

    mysql_info(): 返回关于最近所执行查询的信息。

    mysql_init(): 获取或初始化MYSQL结构。

    mysql_insert_id(): 返回上一个查询为AUTO_INCREMENT列生成的ID。

    mysql_kill(): 杀死给定的线程。

    mysql_library_end(): 最终确定MySQL C API库。

    mysql_library_init(): 初始化MySQL C API库。

    mysql_list_dbs(): 返回与简单正则表达式匹配的数据库名称。

    mysql_list_fields(): 返回与简单正则表达式匹配的字段名称。

    mysql_list_processes(): 返回当前服务器线程的列表。

    mysql_list_tables(): 返回与简单正则表达式匹配的表名。

    mysql_more_results(): 检查是否还存在其他结果。

    mysql_next_result(): 在多语句执行过程中返回/初始化下一个结果。

    mysql_num_fields(): 返回结果集中的列数。

    mysql_num_rows(): 返回结果集中的行数。

    mysql_options(): 为mysql_connect()设置连接选项。

    mysql_ping(): 检查与服务器的连接是否工作,如有必要重新连接。

    mysql_query(): 执行指定为“以Null终结的字符串”的SQL查询。

    mysql_real_connect(): 连接到MySQL服务器。

    mysql_real_escape_string(): 考虑到连接的当前字符集,为了在SQL语句中使用,对字符串中的特殊字符进行转义处理。

    mysql_real_query(): 执行指定为计数字符串的SQL查询。

    mysql_refresh(): 刷新或复位表和高速缓冲。

    mysql_reload(): 通知服务器再次加载授权表。

    mysql_rollback(): 回滚事务。

    mysql_row_seek(): 使用从mysql_row_tell()返回的值,查找结果集中的行偏移。

    mysql_row_tell(): 返回行光标位置。

    mysql_select_db(): 选择数据库。

    mysql_server_end(): 最终确定嵌入式服务器库。

    mysql_server_init(): 初始化嵌入式服务器库。

    mysql_set_server_option(): 为连接设置选项(如多语句)。

    mysql_sqlstate(): 返回关于上一个错误的SQLSTATE错误代码。

    mysql_shutdown(): 关闭数据库服务器。

    mysql_stat(): 以字符串形式返回服务器状态。

    mysql_store_result(): 检索完整的结果集至客户端。

    mysql_thread_id(): 返回当前线程ID。

    mysql_thread_safe(): 如果客户端已编译为线程安全的,返回1。

    mysql_use_result(): 初始化逐行的结果集检索。

    mysql_warning_count():返回上一个SQL语句的告警数。

    与MySQL交互时,应用程序应使用该一般性原则:

    1.    通过调用mysql_library_init(),初始化MySQL库。库可以是mysqlclient C客户端库,或mysqld嵌入式服务器库,具体情况取决于应用程序是否与“-libmysqlclient”或“-libmysqld”标志链接。

    2.    通过调用mysql_init()初始化连接处理程序,并通过调用mysql_real_connect()连接到服务器。

    3.    发出SQL语句并处理其结果。(在下面的讨论中,详细介绍了使用它的方法)。

    4.    通过调用mysql_close(),关闭与MySQL服务器的连接。

    5.    通过调用mysql_library_end(),结束MySQL库的使用。

    介绍常用到的MYSQL相关的C变量类型。这些类型在我们后面定义变量的时候会用到

    1、MYSQL

           要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接

    示例:

    MYSQL mysql;                    #创建MYSQL实例

    mysql_init(&mysql);             #初始化开始进行连接

    2、MYSQL_RES

    这个结构代表返回行的一个查询的(SELECT, SHOW, DESCRIBE, EXPLAIN)的结果。返回的数据称为“数据集”。 从数据库读取数据,最后就是从MYSQL_RES中读取数据。

    PS:类似于JAVA里面的ResultSet变量一样,将结果集存入到此变量中再从它里面去读数据。

    3、MYSQL_ROW

    这是一个行数据的类型安全(type-safe)的表示。当前它实现为一个计数字节的字符串数组。行通过调用mysql_fetch_row()获得

    4、MYSQL_FIELD

    你可以通过重复调用mysql_fetch_field()对每一列获得MYSQL_FIELD结构。这个结构包含字段信息,例如字段名、类型和大小。

    PS:此变量定义的是列的相关属性问题!

    示例一:实现遍历查询select * from table-name 操作

    #include "windows.h"
    
    #include "mysql.h"
    
    #pragma comment(lib,"libmySQL.lib")
    
    int main()
    
    {
    
          MYSQL mysql;     //mysql连接
    
          MYSQL_RES *res; //这个结构代表返回行的一个查询结果集
    
          MYSQL_ROW row; //一个行数据的类型安全(type-safe)的表示
    
          char *query;   //查询语句     
    
          int t,r;
    
          mysql_init(&mysql);
    
             if (!mysql_real_connect(&mysql,"localhost", "root", "123", "test",3306,NULL,0))
    
          {
    
     
    
             printf( "Error connecting to database: %s",mysql_error(&mysql));
    
     
    
          } else
    
             printf("Connected...");
    
             query="SET CHARACTER SET utf8"; //设置编码
    
          t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));
    
          if(t)
    
          {
    
               printf("编码设置失败");
    
          }
    
             query=" select * from a ";
    
          t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));
    
          if(t)
    
          {
    
              printf("执行查询时出现异常: %s",mysql_error(&mysql));
    
          }else
    
              printf("[%s] 构建成功",query);
    
          res=mysql_store_result(&mysql);
    
          while(row=mysql_fetch_row(res))
    
          {                             
    
              /*
    
                    for(t=0;t<mysql_num_fields(res);t++)
    
               {
    
                   printf("%s" " ",row[t]);
    
               }
    
                     */
    
                    printf("%s",row[1]);         表示查询的第几个字段的!也还可以遍历全部字段信息
    
              printf("
    ");
    
     
    
          }
    
          mysql_free_result(res);
    
    mysql_close(&mysql);
    
             return 0;
    
    }
    

      

     示例二:执行插入、更新、删除操作

    #include "windows.h"
    
    #include "mysql.h"
    
    #pragma comment(lib,"libmySQL.lib")
    
    int main()
    
    {
    
          MYSQL mysql;     //mysql连接
    
          MYSQL_RES *res; //这个结构代表返回行的一个查询结果集
    
          MYSQL_ROW row; //一个行数据的类型安全(type-safe)的表示
    
          char *query;   //查询语句     
    
          int t,r;
    
          mysql_init(&mysql);
    
             if (!mysql_real_connect(&mysql,"localhost", "root", "123", "test",3306,NULL,0))
    
          {
    
     
    
             printf( "Error connecting to database: %s",mysql_error(&mysql));
    
     
    
          } else
    
             printf("Connected...");
    
             query="SET CHARACTER SET utf8"; //设置编码
    
          t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));
    
          if(t)
    
          {
    
               printf("编码设置失败");
    
          }
    
             query="insert into a(name,age) values('w',9)";
    
          t=mysql_real_query(&mysql,query,(unsigned int)strlen(query));
    
          if(t)
    
          {
    
              printf("执行查询时出现异常: %s",mysql_error(&mysql));
    
          }else
    
              printf("[%s] 构建成功",query);
    
          mysql_close(&mysql);
    
          return 0;
    
    }
    

      好东西。。。。保存!!

  • 相关阅读:
    js正则表达式
    js遍历对象属性
    C# 带Cookies发送请求
    C# Cookies设置和读取
    C# ref 和 out 的使用
    jq 禁用复选框 和输入框
    C++学习之嵌套类和局部类
    C++学习之this指针
    C++学习之运算符重载的总结
    Labview中引用,属性节点,局部变量之间的区别
  • 原文地址:https://www.cnblogs.com/jycboy/p/5178751.html
Copyright © 2020-2023  润新知