[14]APUE:API for Mysql
库:/usr/lib64/libmysqlclient.so.#.#... 头文件:/usr/lib64/mysql/mysql.h
一、建立连接
- MYSQL *mysql_init(MYSQL *); 用于初始化连接句柄,通常以NULL作为参数,执行成功则返回一个指向新分配的连接句柄结构的指针,失败返回NULL
- MYSQL *mysql_real_connect(
- MYSQL *connection, 基于mysql_init初始化的结构指针,连接Mysql服务器,成功返回connection指针,失败返回NULL
- const char *server_host, server_host可以是主机名或IP地址
- const char *sql_user_name, Mysql用户名称
- const char *sql_password, Mysql登陆密码
- const char *db_name, 目标数据库名称
- unsigned int port_number, 默认0
- const char *unix_socket_name, 默认NULL
- unsigned int flags); 默认0,可传递CLIENT_FOUND_ROWS等参数,改变默认行为
- void mysql_close(MYSQL *connection); 关闭连接,释放资源
- int mysql_options(MYSQL *connection, enum option_to_set, const cahr *argument); 仅能在mysql_init和mysql_real_connect之间执行,且每次只能设置一个选项,多选项设置须多次调用,成功返回0,失败返回非0,常用于设置连接超时时间——使用枚举项MYSQL_OPT_CONNECT_TIMEOUT
二、错误处理
- unsigned int mysql_errno(MYSQL *connection); 返回错误码
- char *mysql_error(MYSQL *connection); 返回文本形式的错误信息
三、执行SQL语句
1、不返回数据的SQL语句
- int mysql_query(MYSQL *connection, const char *query); 第二个参数接收字符串数组,用于包含不带分号的SQL语句,成功返回0
- my_ulonglong mysql_affected_rows(MYSQL *connection); 返回SQL语句实际修改的行数,非匹配到的行数,若没有行受到影响,则返回0
2、标记插入的位置
- SQL中的LAST_INSERT_ID()函数用于标记当前客户端连接的最后插入的由AUTO_INCREMENT产生的ID数字
3、返回数据的SQL语句
- MYSQL_RES *mysql_store_result(MYSQL *connection); 一次提取所有数据,失败返回NULL
- MYSQL_RES *mysql_use_result(MYSQL *connection); 一次提取一行数据,失败返回NULL
- my_ulonglong mysql_num_rows(MYSQL_RES *result); 返回mysql_store/use_result函数提取到的行数,若没有返回行,则返回0
- MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); 逐行从mysql_store/use_result返回的结果中提取数据,存放至一个行数据结构体中,用于后续处理,数据用完或发生错误时返回NULL
- void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset); 仅能与mysql_store_result函数搭配使用,用于设置下一次将被mysql_fetch_row函数操作的行号,offset的取值范围为0至结果集的总行数减1
- MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result); 仅能与mysql_store_result函数搭配使用,
- MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset); 仅能与mysql_store_result函数搭配使用,
- void mysql_free_result(MYSQL_RES *resuslt); 清理已操作完成的对象
4、处理返回的数据
- unsigned int mysql_field_count(MYSQL *connection); 返回提取到的数据集的字段数目
- MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result); 按单一字段提取元数据——表名称、字段名称、字段数据类型、字段定义的标志(如NULL、PRIMARY KEY等) ,存放至一个字段结构体(包含各项元数据)中,数据用完或发生错误返回NULL
STRUCT MYSQL_FIELD {
char *name; 字段名称
char *table; 所属表的名称
char *def;
enum enum_field_types type; 字段类型:FIELD_TYPE_DECIMAL/LONG/STRING/VAR_STRING等
unsigned int length; 定义表时指定的字段宽度
unsigned int max_length; 仅在使用mysql_store_result时有效,表示结果集中以字节为单位的最长字段值的长度
unsigned int flags; 字段定义的标志,如:AUTO_INCREMENT_FLAG、BINARY_FLAG等
unsigned int decimals; 小数位数,仅对数字字段有效;IS_NUM宏可用于判断字段类型是否为数字,是则返回true
};- MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset); 类同mysql_row_seek,用于设定某一行内的字段偏移
四、示例程序
...
[14]APUE:API for Mysql的更多相关文章
- Mysql高手系列 - 第14篇:详解事务
这是Mysql系列第14篇. 环境:mysql5.7.25,cmd命令中进行演示. 开发过程中,会经常用到数据库事务,所以本章非常重要. 本篇内容 什么是事务,它有什么用? 事务的几个特性 事务常见操 ...
- Ubuntu Server 14.04 --secure-file-priv error in MySql 解决方案
在VPS部署Ubuntu 14.04服务器时,MySQL执行导出文件命令,报错: The MySQL server is running with the --secure-file-priv opt ...
- 笔记:linux下mysql设置utf-8编码方法
一:查看mysql版本 1.1 mysql –V 在终端界面输入上面命令.显示如下: mysql Ver 14.14 Distrib 5.5.35, fordebian-linux-gnu (x86_ ...
- Python自动化 【第十二篇】:Python进阶-MySQL和ORM
本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ...
- AngularJS快速入门指南15:API
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- 转 用C API 操作MySQL数据库
用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...
- [译] 企业级 OpenStack 的六大需求(第 1 部分):API 高可用、管理和安全
全文包括三部分: 第一部分:API 高可用和管理以及安全模型 第二部分:开放架构和混合云兼容 第三部分:弹性架构和全球交付 引言 OpenStack 是构造企业级私有云的非常理想的基础.它立志成为新一 ...
- coreseek实战(二):windows下mysql数据源部分配置说明
coreseek实战(二):windows下mysql数据源部分配置说明 关于coreseek在windows使用mysql数据源的配置,以及中文分词的详细说明,请参考官方文档: mysql数据源配置 ...
- 一场完美的“秒杀”:API加速的业务逻辑
清晨,我被一个客户电话惊醒,客户异常焦急,寻问CDN能不能帮助他们解决“秒杀”的问题,他们昨天刚刚进行了“整点秒杀活动”,结果并发量过大,导致服务宕机,用户投诉. 为了理清思路,我问了对方三个问题: ...
随机推荐
- 构造——cf1202d
和以前有一题构造01串的很像,固定住一个7,求出3的个数,对1的位置进行贪心 /* 1337 1 13337 3 133337 6 1333337 10 */ #include<bits/std ...
- h5移动端局部放大效果
首先添加zoom.js (function (root, factory) { if (typeof exports === 'object' && typeof module === ...
- BZOJ 3230: 相似子串(后缀数组)
传送门 解题思路 其实题目挺好想的.首先子串排名可以由后缀数组求得,因为不算重复的,所以后缀数组的每个后缀排名的去掉\(lcp\)的前缀排名为当前后缀的子串排名.这样就可以预处理出每个后缀的\(l,r ...
- NX二次开发-OLE/COM向EXCEL表格中插入图片
今晚有一个兄弟问我怎么往EXCEL里插入图片(加工程序单中需要插入图片),这个我之前也没弄过,回复了他一句不知道,后来刚刚干完游戏吃完鸡,就去VC++的书上翻了翻,还真的被我翻到了.VC++的方法往E ...
- NYOJ 301 递推求值
第一次写博客,拿个矩阵快速幂练练手吧. 首先什么是快速幂,快速幂是让复杂度由线性降为log n的算法,比如8^1024次方暴力要算1024次,但是矩阵快速幂只算10次就好. 此题只不过是把快速幂的底数 ...
- spring aop的前奏,动态代理 (5)
目录 一.先看一个计算器的抽取和实现 二.使用动态代理解决以上问题. 1 设计原理 2 代码实现 2.1 接口代码 2.2 实现接口的代码 2.3 测试代码 2.3 创建动态代理类 2.4 动态代理类 ...
- Golang(Go语言)内置函数之copy用法
该函数主要是切片(slice)的拷贝,不支持数组 将第二个slice里的元素拷贝到第一个slice里,拷贝的长度为两个slice中长度较小的长度值 示例: s := []int{1,2,3} fmt. ...
- Ubuntu下安装Samba服务器
闲来无聊尝试自己安装下Samba服务器,使本机和虚拟机可以无障碍传输文件(虽然用VMwaretools可传,但总感觉麻烦,而且速度欠佳) 首先,同安装qemu一样,在安装之前要确定你的系统apt列表已 ...
- JS互相调用
JS互相调用 例1: <html> <head> <meta charset="UTF-8"> <script type="te ...
- 剑指offer——03二维数组中的查找
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...