从数据库中取回数据

在这个实例中我们从表中取回数据。

步骤:

(1)创建连接

(2)执行查询

(3)获取结果集

(4)提取所有可用的记录

(5)释放结果集实例程序打印 writers 表中所有的记录(姓名)。

#include

#include

int main(int argc, char * argv[])

{

MYSQL * conn;

MYSQL_RES * result;

MYSQL_ROW row;

int num_fields;

int i;

conn = mysql_init(NULL);

mysql_real_connect(conn, "localhost", "username", "password", "testdb", 0, NULL, 0);

mysql_query(conn, "SELECT * FROM writers");

result = mysql_store_result(conn);

num_fields = mysql_num_fields(result);

while ((row = mysql_fetch_row(result)))

{

for (i=0; i

printf("%s ", row[i] ? row[i] : "NULL");

printf("\n");

}

mysql_free_result(result);

mysql_close(conn);

}

mysql_query(conn, "SELECT * FROM writers"); 执行查询将取回表 writers 中所有的记录。

result = mysql_store_result(conn);

取得结果集。

num_fields = mysql_num_fields(result);

获得表中的字段数量。

mysql_query(conn, "SELECT * FROM writers");while ((row = mysql_fetch_row(result)))

{

for (i=0; i

printf("%s ", row[i] ? row[i] : "NULL");

printf("\n");

}

获取记录并打印到屏幕。

mysql_free_result(result); 释放资源。

字段名称

这个实例里将要打印数据并显示字段名称。

为此我们创建一个新的表 friends。

mysql> CREATE TABLE friends (id int not null primary key auto_increment,name varchar(20), age int);

mysql> insert into friends(name, age) values('Tom', 25);

mysql> insert into friends(name, age) values('Elisabeth', 32);

mysql> insert into friends(name, age) values('Jane', 22);

mysql> insert into friends(name, age) values('Luke', 28);

插入一些数据到表中。

#include

#include

int main(int argc, char * argv[])

{

MYSQL * conn;

MYSQL_RES * result;

MYSQL_ROW row;

MYSQL_FIELD * field;

int num_fields;

int i;

conn = mysql_init(NULL);

mysql_real_connect(conn, "localhost", "username", "password", "testdb", 0, NULL, 0);

mysql_query(conn, "SELECT * FROM friends");

result = mysql_store_result(conn);

num_fields = mysql_num_fields(result);

while ((row = mysql_fetch_row(result)))

{

for(i=0; i

{

if (i == 0) {

while(field = mysql_fetch_field(result)) {

printf("%s ", field->name);

}

printf("\n");

}

printf("%s ", row[i] ? row[i] : "NULL");

}

}

printf("\n");

mysql_free_result(result);

mysql_close(conn);

return 0;

}

这个实例和之前有一点差别,仅仅增加了字段名称。

mysql_fetch_field() 返回一个 MYSQL_FIELD 结构。我们从这个结构中得到名称(name)。

./header

id name age

1 Tom 25

2 Elisabeth 32

3 Jane 22

4 Luke 28

这是程序输出结果。

插件图片到 MySQL 数据库

一些用户喜欢将图片存入数据库,还有一些用户喜欢将图片存入本地文件系统。图片是二进制数据,MySQL 有专用的数据类型BLOB(Binary Large Object) 以存储二进制数据。

mysql> describe images;

+-------+------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | | |

| data | mediumblob | YES | | NULL | |

+-------+------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

这个表将在我们的实例中使用,通过下面的 SQL 语句可以创建它。

CREATE TABLE images(id int not null primary key, data mediumblob);

#include

#include

int main(int argc, char * argv[])

{

MYSQL * conn;

int len, size;

char data[1000*1024];

char chunk[2*1000*1024+1];

char query[1024*5000];

FILE * fp;

conn = mysql_init(NULL);

mysql_real_connect(conn, "localhost", "username", "password", "testdb", 0, NULL, 0);

fp = fopen("image.png", "rb");

size = fread(data, 1, 1024*1000, fp);

mysql_real_escape_string(conn, chunk, data, size);

char *stat = "INSERT INTO images(id, data) VALUES('1', '%s')";

len = snprintf(query, sizeof(stat)+sizeof(chunk), stat, chunk);

mysql_real_query(conn, query, len);

fclose(fp);

mysql_close(conn);

return 0;

}

在这个实例中,我们插入一张图片到表 images 中,图片最大可以是 1MB。

fp = fopen("images.png", "rb");

size = fread(data, 1, 1024*1000, fp);

这里打开图片并读入数据集。

mysql_real_escape_string(conn, chunk, data, size);

二进制数据可以包含特殊字符,为了在 SQL 语句中不造成麻烦。我们必需避开它们。 mysql_real_escape_string() 函数将编码后的数据放入集合 chunk。这样,它们就可以是合法的语句了。这个函数还会在结尾增加一个 NULL 字符,这也是为什么集合 chunk 是集合 data两倍多一个字节。

char * stat = "INSERT INTO images(id, data) VALUES('1', '%s')";

len = snpritnf(query, sizeof(stat)+sizeof(chunk), stat, chunk); 这两行代码准备查询语句。

mysql_real_query(conn, query, len);

最后,我们执行语句。

从 MySQL 数据库中有选择的取出图片在上一个实例中,我们在数据库中插入了图片。在本实例中,我们将有选择的取出这些插入的图片。

#include

#include

int main(int argc, char * argv[])

{

MYSQL * conn;

MYSQL_RES * result;

MYSQL_ROW row;

unsigned long * lengths;

FILE * fp;

conn = msyql_init(NULL);

mysql_real_connect(conn, "localhost", "username", "password", "testdb", 0, NULL, 0);

fp = fopen("image.png", "wb");

mysql_query(conn, "SELECT data FROM images WHERE id=1");

result = mysql_store_result(conn);

row = mysql_fetch_row(result);

lengths = mysql_fetch_lengths(result);

fwrite(row[0], lengths[0], 1, fp);

mysql_free_result(result);

fclose(fp);

mysql_close(conn);

return 0;

}

这个实例中我们将数据库中 ID 为 1 的图片创建为文件 image.png

fp = fopen("image.png", "wb");//以可写的方式打开一个文件。mysql_query(conn, "SELECT data FROM images WHERE id=1");//选择 ID 为 1 的图片。row=mysql_fetch_row(result);//row 包含了原始数据。lengths = mysql_fetch_lengths(result);//获取图片长度。fwrite(row[0], lengths[0], 1, fp);//使用标准函数 fwrite() 将数据写入文件

c 应用程序mysql_MySQL C 语言应用程序接口开发教程相关推荐

  1. MySQL C 语言应用程序接口开发教程

    从数据库中取回数据 在这个实例中我们从表中取回数据. 步骤: (1)创建连接 (2)执行查询 (3)获取结果集 (4)提取所有可用的记录 (5)释放结果集实例程序打印 writers 表中所有的记录( ...

  2. 真封神引擎技术篇之易语言GM工具开发教程第三集

    真封神引擎技术篇之易语言GM工具开发教程第三集www.52fengshen.com 下载地址 http://pan.baidu.com/s/1uyTBG

  3. 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...

    (原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询) /************************************************************ ...

  4. 输入输出管理:输入输出应用程序接口、设备驱动程序接口

    1.输入输出管理:输入输出应用程序接口.设备驱动程序接口 下图来自王道考研操作系统 I/O软件层次结构 1.1 输入输出应用程序接口 下图来自程序员cxuan 块设备 下图来自程序员cxuan 字符设 ...

  5. 什么是 API(应用程序接口)?

    API(应用程序接口)是一种软件中介,它允许两个不相关的应用程序相互通信.它就像一座桥梁,从一个程序接收请求或消息,然后将其传递给另一个程序,翻译消息并根据 API 的程序设计执行协议.API 几乎存 ...

  6. IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)

    IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard .xib 混用.完美解决方案) 参考文章: (1)IOS APP 国际化 程序内切换语言实现 不重新启动系统 ...

  7. 程序员的语言“艳遇史”(一)——班长pascal

    程序员的语言"艳遇史"(一) (***以下小说情节纯属虚构,供朋友们在紧张编程后轻松一下,如有雷同纯属巧合,切勿对号入座***) 地狱里,一个曾经的程序员经不过魔鬼们的严刑拷打,终 ...

  8. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

  9. 写操作系统用的C语言和写应用程序的C语言不是一个

    我以前看一本书,名叫 30天自制操作系统:大概翻了一下,感觉也不是太难:因为比如,它有一整章在讲,C语言指针.C语言画一个矩形:你要是熟悉C语言的话,指针肯定理解:在没有窗口的情况下,用Turbo C ...

最新文章

  1. Java集合,ConcurrentHashMap底层实现和原理(常用于并发编程)
  2. 判断均匀平面波的极化形式_测瑞通|怎样判断电波暗室的性能?
  3. 【Python数据结构】——二叉查找树(查找、构建、删除、插入、打印)
  4. git 撤销挂起的更改_Timer计时任务因系统时间的修改导致挂起解决方案
  5. VS生成Cordova for Android应用之Gradle
  6. SpringBoot整合Redis集群版本问题
  7. iOS时间转换相关整理(附送试用期逻辑处理)
  8. ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)
  9. windows服务器远程关机或重启
  10. 企业网络营销意识的重要性
  11. lib的编写与使用(C/C++)
  12. linux怎么配置共享目录,Linux 配置共享目录方法
  13. 主机炸鸡?Z世代主机市场终究是肯德基的?
  14. 社会网络分析:探索人人网好友推荐系统
  15. 使用迅雷下载百度网盘资源
  16. 一、Oracle创建账户、修改、删除账户及授权和撤销授权。
  17. 华为 手机 hbuilderx 连接不上手机
  18. 如何测试 LoRaWAN 全球频段
  19. 如何设计更好的游戏技能树
  20. JS 基础篇(七) 函数柯理化

热门文章

  1. Angular应用提高打包速度
  2. java后台分页插件怎么写_Java分页技术(从后台传json到前台解析显示)
  3. iOS Named colors do not work prior to iOS 11.0问题解决
  4. iOS 走近商城 APP(三 WKWebView 商品规格选择框架封装)
  5. python pexpect
  6. java常用的7大排序算法汇总
  7. iOS 进阶—— iOS内存管理
  8. Oracle 12C -- 清空audit记录
  9. 使用Spring实现邮件发送
  10. const在函数前与函数后的区别 [转]