用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. 吐槽坑爹的微软win store app审核

    从学习win store app 开发到做出第一个应用 博客园cnblogs 花了一个多月的全部业余和上班空闲时间, 上周在端午节放假期间终于完成了计划的全部开发和测试, 6月10号怀着无比激动的心情 ...

  2. Windows Azure HandBook (5) Azure混合云解决方案

    <Windows Azure Platform 系列文章目录> 在很多情况下,我们都会遇到本地私有云和公有云做互通互联的混合云场景.对于这种混合云的场景,微软的Windows Azure会 ...

  3. 30天C#基础巩固------读写流(StreamWrite/StreamReader)

    一:读写流的一些案例. --->关于StreamWrite       这里的一些常用的方法和我们之前的那个FileStream是一样的,参数很多都是一样的用法. Console.WriteLi ...

  4. 自己封装的JS分页功能[用于搭配后台使用]

    * 2016.7.03 修复bug,优化代码逻辑 * 2016.5.25 修复如果找不到目标对象的错误抛出. * 2016.5.11 修复当实际页数(pageNumber)小于生成的页码间隔数时的bu ...

  5. 观察者模式(Observer pattern)

    知识点 使对象之间达到松耦合的效果. 观察者模式定义了对象之间一对多的关系.主题用一个共同的接口来更新观察者. 观察者和被观察者之间通过松耦合的方式结合,被观察者不用理会观察者的实现细节,只需要观察者 ...

  6. Web API配置自定义路由

    默认访问Web API时,是无需指定method名.它会按照默认的路由来访问.如果你的Web API中出现有方法重载时,也许得配置自定义路由: 标记1为自定义路由,标记2为默认路由,需要把自定义路由排 ...

  7. hangfire+bootstrap ace 模板实现后台任务管理平台

    前言 前端时间刚开始接触Hangfire就翻译了一篇官方的教程[翻译+山寨]Hangfire Highlighter Tutorial,后来在工作中需要实现一个异步和定时执行的任务管理平台,就结合bo ...

  8. Can't install mysql-python version 1.2.5 in Windows

    Can't install mysql-python version 1.2.5 in Windows http://stackoverflow.com/questions/37092125/cant ...

  9. Delphi 10.1 Berlin UTF8String Test

    Delphi 10.1 Berlin UTF8String Test procedure TForm1.Button1Click(Sender: TObject); var s: UTF8String ...

  10. 基于类型系统的面向对象编程语言Go

    (整理自网络) 面向对象编程 Go语言的面向对象编程(OOP)非常简洁而优雅.说它简洁,在于它没有了OOP中很多概念,比如:继承.虚函数.构造函数和析构函数.隐藏的this指针等等.说它优雅,是它的面 ...