MYSQL C API 记录
一、环境与条件
MySQL AB 提供了C API,能够提供低等级界面,负责完毕涉及SQLserver交互的大多数常规任务:数据库连接 、查询、结果集处理和错误处置。C API通过两个组件实现:
头文件:mysql.h,包括结构和功能说明。
Mysql库:libmysqlclient(Unix) 或 mysqlclient.lib(Windows),包含C的实际功能。
另外,在Windows下构建客户机,须要特别注意一些额外情况。见 http://www.mysql.com/doc/en/windows_client_compiling.html。假设计划在Windows下编译客户机,还须要第三个组件:
头文件:my_global.h,提供Windows须要的额外定义。
安装后,mysql.h和mysqlclient.lib(或libmysqlclient)分别能够在MySQL的安装文件夹下找到。
二、MySQL API 使用步骤
1.初始化MYSQL结构:mysql_init(&mysql); // mysql 类型为 MYSQL.
2.建立到server连接:mysql_real_connect(&mysql, "host", "user", "password", "db1", 0, NULL, 0); //採用默认值的三个參数分别为:连接MySQLserver时使用的port,连接MySQLserver时使用的套接字,控制客户机行为使用的一个或多个可选标志。详情可參阅MySQL手冊。
假设连接成功,将返回一个句柄,连接失败,将返回假。參考 http://www.mysql.com/documentation
3.选择数据库:mysql_select_db(&mysql, "db_name");
4.查询实施:mysql_query(&mysql, query_string);
5.对Select查询返回的结果集处理:
MYSQL_RES * result = mysql_store_result(&mysql); //将查询的结果保持到变量result。假设mysql_query()运行出错,用mysql_store_query()函数取结果集将返回NULL给result。假设客户机内存不大,能够每次检索一行记录:mysql_use_result()。
int numRows = mysql_num_rows(result); //检验结果集行数。
int numFields = mysql_num_fields(result); //检验结果集列数。
MYSQL_ROW row = mysql_fetch_row(result); //从结果集读取一行记录。
MYSQL_FIELD * field = mysql_fetch_field(result); //返回字段属性具体信息,如:字段名,类型,长度...
MYSQL_FIELD* fields=mysql_fetch_fields(result); //返回MYSQL_FIELD结构的数组,每一个字段针对一个结果集合。
mysql_free_result(result); //使用完后,要释放结果集变量空间。
6.INSERT,UPDATE、DELETE等操作的结果处理:
mysql_affected_rows(&mysql); //返回受影响的记录数
7.涉及结果集处理的辅助函数:
MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result,
MYSQL_ROW_OFFSET offset); //跳至该详细行
MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result,
MYSQL_FIELD_OFFSET offset); //跳至该行详细列
MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res); //返回字段列表中字段游标当前位置。
MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res); //返回结果集中行游标当前位置。
unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result); //当前行的字段值长度
my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); //返回产生ATUO_INCREMENT字段的最后ID。
8.错误处置:
unsigned int STDCALL mysql_errno(MYSQL *mysql); //错误号
const char * STDCALL mysql_error(MYSQL *mysql); //错误信息
9.关闭连接:
mysql_close(MYSQL* mysql);
演示样例:客户机查询器
#include "stdafx.h"
#include <windows.h>
#include <winsock.h>
#include <iostream>
#include "F:/MySQL5/include/mysql.h"
#pragma comment(lib, "F://MySQL5//lib//opt//libmysql.lib")
using namespace std;
int main(int argc, char* argv[])
{
char query[255];
int i, j, h;
MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;
MYSQL_FIELD *field;
if (argc != 4)
{
printf ("Usage: %s <host> <user> <password>/n", argv[0]);
return -1;
}
mysql_init(&mysql);
if (!(mysql_real_connect(&mysql, argv[1], argv[2], argv[3], NULL, 0, NULL, 0)))
{
fprintf(stderr, "Error in connection: %s/n", mysql_error(&mysql));
return -1;
}
while (true)
{
printf ("query? ");
fgets(query, sizeof(query), stdin);
if (strcmp (query, "exit/n") ==0) break;
if (mysql_query(&mysql, query) != 0)
{
fprintf (stderr, "Error in query: %s/n", mysql_error(&mysql));
}
else
{
if (result = mysql_store_result(&mysql))
{
int numRecords = mysql_num_rows(result);
int numFields = mysql_num_fields(result);
for (h = 0; h < numFields; h++)
{
field = mysql_fetch_field(result);
printf ("[%s]", field->name);
h != (numFields-1) ? printf (", ") : printf("/n");
}
for (i = 0; i < numRecords; i++)
{
row = mysql_fetch_row(result);
for (j = 0; j < numFields; j++)
{
fprintf (stdout, "%s", row[j]);
j != (numFields-1) ? printf(", ") : printf("/n");
}
}
fprintf (stdout, "** Query successful, %d rows retrieved **/n", numRecords);
mysql_free_result(result);
}
else
{
if (mysql_field_count(&mysql) == 0)
{
fprintf (stdout, "** Query successful, %d rows affected **/n", mysql_affected_rows(&mysql));
}
else
{
fprintf (stderr, "Error in reading result set: %sn/n", mysql_error(&mysql));
}
}
}
}
mysql_close(&mysql);
return 0;
}
环境:VC 6.0, mysql 5.0.45-community-nt
MYSQL C API 记录的更多相关文章
- mysql C API的使用
<MySQL++简介>介绍了如何使用C++来访问mysql,本文记录下使用C API访问mysql,mysql++就是对本文介绍的C-API的封装. 常用函数(名字就能告诉我们用法): M ...
- PHP数据库操作:从MySQL原生API到PDO
本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对象.PDO操作MySQL数据库的. 为了后面的测试,先建立数据库表test.包含表名user,s ...
- c++使用mysql的api连接相关问题
记录一下自己使用中的相关问题,方便有相同问题的同学解决. 关于在VS中的各种配置.看这里.只是须要注意一下,我如今用的mysql版本号是5.6的,已经没有[MySQL Server \lib\opt] ...
- MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
- mysql C API 字符串玩转备份调优
- MySQL高效获取记录总数
通常mysql获取查询记录总数我们使用如下语句: SELECT COUNT(*) FROM users WHERE k='avs'; 或:SELECT id FROM goods WHERE k=' ...
- The MySQL C API 编程实例
在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
- MySQL C API概述
以下列表总结了C API中可用的功能.有关更多详细信息,请参见 第27.8.7节“C API函数描述”中的说明. my_init():在线程安全程序中初始化全局变量和线程处理程序 mysql_affe ...
随机推荐
- android 图片浏览器 demo
先上效果图,本demo 会逐步完好 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTU2NTczMDE2NjEz/font/5a6L5L2T/fontsi ...
- HDU ACM 2586 How far away ?LCA->并查集+Tarjan(离线)算法
题意:一个村子有n个房子,他们用n-1条路连接起来,每两个房子之间的距离为w.有m次询问,每次询问房子a,b之间的距离是多少. 分析:近期公共祖先问题,建一棵树,求出每一点i到树根的距离d[i],每次 ...
- [转]C#自定义开关按钮控件--附带第一个私活项目截图
原文地址:http://www.cnblogs.com/feiyangqingyun/archive/2013/06/15/3137597.html 进入智能手机时代以来,各种各样的APP大行其道,手 ...
- C++primer读书笔记9-转换和类类型
有时指定自己的类类型来表示某些类型的数据,如SmallInt,然后在为了便于计算将指定一个转换算,类类型,在某些情况下,自己主动转换为指定的类型 <1>转换操作符 operator typ ...
- 复制360于Launcher浮动窗口的屏幕显示内存使用情况(基本版)
MainActivity如下面: package cc.cc; import android.os.Bundle; import android.view.View; import android.v ...
- POJ--2923--Relocation--如压力DP
Relocation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2288 Accepted: 950 Descrip ...
- 2015广东工业大学ACM学校巡回赛 I 游戏高手 (如压力dp)
Problem I: 游戏王 Description 小学的时候,Stubird很喜欢玩游戏王.有一天,他发现了一个绝佳的连锁组合,这个连锁组合须要6张卡. 但是他一张都没有,但是他的那些朋友们有.只 ...
- 交换A与B值的四种方法
在网上看到了这样一道面试题,"int A=5,int B=2,怎样交换A与B的值",或许这是一道简单到不能再简单的题,但能作为一道面试题,肯定有其独特之处 大多数人会通过定义第三个 ...
- http协议和web本质(转)
当你在浏览器地址栏敲入“http://www.cnblogs.com/”,然后猛按回车,呈现在你面前的,将是博客园的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其是web开发人员, ...
- UVa10986_Sending email(最短)(白皮书图论的话题)
解决报告 思路: 裸裸的最短路. #include <iostream> #include <cstring> #include <cstdio> #include ...