转 用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("\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数据库的更多相关文章
- java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据
package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- Java 操作MySql数据库
Java 项目开发中数据库操作是很重要的一个方面,对于初学者来说,MySql是比较容易熟悉的一种常见数据库,这篇文章记录了如何用Java来操作MySql数据库. 第一章 JDBC的概念 JDBC(Ja ...
- 使用EF操作Mysql数据库中文变问号的解决方案
问题场景:使用Entity Framework 6.0 操作Mysql数据库,中文保存至数据库后全部变成问号.但是使用Mysql API却不会. 原因排查:首先想到的肯定是数据库编码问题,一次查询了表 ...
- Go语言操作MySQL数据库
Go语言操作MySQL数据库 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用 ...
- ASP.NET Core使用EF Core操作MySql数据库
ASP.NET Core操作MySql数据库, 这样整套环境都可以布署在Linux上 使用微软的 Microsoft.EntityFrameworkCore(2.1.4) 和MySql出的 MySql ...
- 【转】python操作mysql数据库
python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库 ...
- c语言操作mysql数据库
c语言操作Mysql数据库,主要就是为了实现对数据库的增.删.改.查等操作,操作之前,得先连接数据库啊,而连接数据库主要有两种方法.一.使用mysql本身提供的API,在mysql的安装目录中可可以看 ...
- python接口自动化(三十八)-python操作mysql数据库(详解)
简介 现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库, ...
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
随机推荐
- 使用NuGet管理项目类库引用
NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2012 ,VS2013中默认集成了N ...
- Halcon编程-基于纹理的mara检测
表面瑕疵检测是机器视觉领域非常重要的一个应用.机器视觉是集光学.机电和计算机三个领域的一门不算新的技术.但目前表面瑕疵检测在学界主要是计算机专业或者控制专业瞄准图像处理方向在做,而视觉光学系统这一块主 ...
- 实现在GET请求下调用WCF服务时传递对象(复合类型)参数
WCF实现RESETFUL架构很容易,说白了,就是使WCF能够响应HTTP请求并返回所需的资源,如果有人不知道如何实现WCF支持HTTP请求的,可参见我之前的文章<实现jquery.ajax及原 ...
- 『给它加个壳』纯MarkDown博客阅读体验优化
今天鼓捣了一天纯MarkDown书写的博客样式的美化,事实证明图表较多的MarkDown撰写的博文一样可以展现出非常漂亮的效果.为了让纯MarkDown书写的博客有一个干净舒服的阅读体验,我主要针对博 ...
- c#中高效的excel导入sqlserver的方法
将oledb读取的excel数据快速插入的sqlserver中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.S ...
- MySQL MHA配置常见问题
MHA在MySQL数据库中被广泛使用,它小巧易用,功能强大,实现了基于MySQL replication架构的自手动主从故障转移,从库重定向到主库并自动同步.尽管如此,在部署配置的过程中,由于疏忽总难 ...
- Windows Server 2012中安装Active Directory域服务
1.登陆Windows Server 2012,打开服务器管理器,选择"添加角色和功能" 2.在"开始之前"页面,直接点击"下一步" 3.选 ...
- 从vs2010的UnitTestFramework类库提取私有方法反射调用的方法
背景 年龄大点的程序员都知道在vs2010中创建单元测试非常的简单,鼠标定位在方法名字,右键创建单元测试,就会创建一个测试方法,即使是在私有方法上也可以创建测试方法. VS2010以后就没这么简单了, ...
- mysql笔记第三天
一下午在学习mysql,最有价值的就是这一点点 Order by 可以对在select字句中出现的字段位置进行排列eg:select name,count(*) from eg group by na ...
- mybatis xml 中的特殊符转义字符号和模糊查询
xml特殊符号转义写法 < < 小于 <= <= 小于或等于 > > 大于 >= >= 大于或等于 <> <> 不等于 & ...