用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. android中AVD的使用

    AVD路径设置 前面提到,不管用Eclipse还是从命令行创建Android Emulator时,相应的文件是被放置到 “C:\Documents and Settings\Administrator ...

  2. velocity分页模板

    以前用后台java拼接分页代码,不利于修改.找到一份velocity模板. <!-- 分页模板 --> #macro(pager $url $pager) <url class=&q ...

  3. SQL Server代理(4/12):配置数据库邮件

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在以前的文章里我们看到,SQL Serve ...

  4. 200、301、302、304、404等HTTP状态码

    在网站建设的实际应用中,容易出现很多小小的失误,就像mysql当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规http状态码的表现也是一样,Google无法验证网站几种解决办法,提及到由于 ...

  5. 矢量Chart图表嵌入HTML5网络拓扑图的应用

    使用 HT for Web (以下简称 HT)开发HTML5网络拓扑图的开发者有 Chart 需求的项目的时候,感觉很痛苦,HT 集成的 Chart 组件中,并不包含有坐标,在展现方面不是很直观,但是 ...

  6. qt 窗口动画

    窗口动画 编辑删除转载 2015-10-10 14:50:27 标签:qt渐变动画 一个应用程序通常包含多个动画,例如,你可能希望同时移动许多graphic items或者一个个按照串行的方式的移动他 ...

  7. Android Studio快捷键每日一练(1)

    原文地址:http://www.developerphil.com/android-studio-tips-of-the-day-roundup-1/ 1.高亮显示相同的字符串 苹果:Cmd+shif ...

  8. Handler "BlockViewHandler" has a bad module "ManagedPipelineHandler" in its module list

    当你的ASP.NET MVC项跑在IIS时,出现如标题Handler "BlockViewHandler" has a bad module "ManagedPipeli ...

  9. 学习“迷你ASP.NET MVC框架”后的小结

    看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...

  10. js设置和读取cookie

    /*path参数:表示cookie所在的目录,.net默认为/(根目录).在同一个服务器上有目录如下:/test/,/test/aa/,/test /bb/,现设一个cookie1的path为/tes ...