用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("\n");

      }

      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;

}

  好东西。。。。保存!!

转 用C API 操作MySQL数据库的更多相关文章

  1. java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据

    package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...

  2. Java 操作MySql数据库

    Java 项目开发中数据库操作是很重要的一个方面,对于初学者来说,MySql是比较容易熟悉的一种常见数据库,这篇文章记录了如何用Java来操作MySql数据库. 第一章 JDBC的概念 JDBC(Ja ...

  3. 使用EF操作Mysql数据库中文变问号的解决方案

    问题场景:使用Entity Framework 6.0 操作Mysql数据库,中文保存至数据库后全部变成问号.但是使用Mysql API却不会. 原因排查:首先想到的肯定是数据库编码问题,一次查询了表 ...

  4. Go语言操作MySQL数据库

    Go语言操作MySQL数据库 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用 ...

  5. ASP.NET Core使用EF Core操作MySql数据库

    ASP.NET Core操作MySql数据库, 这样整套环境都可以布署在Linux上 使用微软的 Microsoft.EntityFrameworkCore(2.1.4) 和MySql出的 MySql ...

  6. 【转】python操作mysql数据库

    python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库 ...

  7. c语言操作mysql数据库

    c语言操作Mysql数据库,主要就是为了实现对数据库的增.删.改.查等操作,操作之前,得先连接数据库啊,而连接数据库主要有两种方法.一.使用mysql本身提供的API,在mysql的安装目录中可可以看 ...

  8. python接口自动化(三十八)-python操作mysql数据库(详解)

    简介 现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库, ...

  9. 【tips】ORM - SQLAlchemy操作MySQL数据库

    优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...

随机推荐

  1. 索引深入浅出(3/10):聚集索引的B树结构

    在SQL Server里,有2种表是以存储为基础的.有聚集索引的表叫聚集表,没有聚集索引的表叫堆表.在上一篇文章,我们讨论了堆表的特性和存储结构.在这篇文章里,我们来看下聚集表. 有聚集索引的表叫聚集 ...

  2. 我们一起来动手开发一个Orm框架,开源发布

    我们追求的方向 1)高性能. 这也是架构创建的目的之一,已经将它的性能提升到了极致.大家可以自己测试.我可以说其性能是数一数二的.连接地址:Moon洗冤录 2)易用性强 我想,用过Moon.ORM的应 ...

  3. position属性absolute与relative 详解

    最近一直在研究javascript脚本,熟悉DOM中CSS样式的各种定位属性,以前对这个属性不太了解,从网上找到两篇文章感觉讲得很透彻,收藏下来,唯恐忘记.一.解读absolute与relative ...

  4. 浅谈 block(1) – clang 改写后的 block 结构

    这几天为了巩固知识,从 iOS 的各个知识点开始学习,希望自己对每一个知识理解的更加深入的了解.这次来分享一下 block 的学习笔记. block 简介 block 被当做扩展特性而被加入 GCC ...

  5. 7z制作自解压安装包

    像7z和winRAR这样的压缩工具都支持制作自解压的文件.所谓自解压的文件就是不需要目标机器上安装解压工具,通过运行压缩包自己即可解压出压缩包中的文件.下面我们就介绍一下如何利用7z的自解压功能制作应 ...

  6. 介绍开源的.net通信框架NetworkComms框架 源码分析(八)SharpZipLibGzipCompressor

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  7. 下载https协议需要的cer证书

    一:https简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全 ...

  8. 2016 大连网赛---Function(单调栈)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5875 Problem Description The shorter, the simpl ...

  9. HDU 4745---Two Rabbits(区间DP)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4745 题意:两只兔子,在n块围成一个环形的石头上跳跃,每块石头有一个权值ai,一只从左往右 ...

  10. 2014 ICPC---Relief grain(树链剖分)

    原题链接 Problem Description The soil is cracking up because of the drought and the rabbit kingdom is fa ...