c 应用程序mysql_MySQL C 语言应用程序接口开发教程

news/2024/7/5 4:07:25

从数据库中取回数据

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

步骤:

(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() 将数据写入文件


http://lihuaxi.xjx100.cn/news/236493.html

相关文章

快速开发生命周期支持工具

去年有幸研究公司管理产品的软件平台,当时考虑的产品是基于业务模型之上的一个系统平台,从建模到运行、部署、维护全生命周期管理.当时就提出两个希望先实践解决的就是可复用原型的设计和使用工作流和规则引擎的协作处理询标产品.前一阵子在公司研究成本产品的成本分析和算法,一…

SQL SERVER中什么情况会导致索引查找变成索引扫描

原文:SQL SERVER中什么情况会导致索引查找变成索引扫描SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试、总结、归纳。 1&…

oracle rac对心跳要求_关于心跳网络引起的Oracle RAC的节点驱逐(不是实例驱逐)...

关于心跳网络引起的Oracle RAC的节点驱逐(不是实例驱逐)问:假设如下场景:4个节点rac,心跳线走的是千m网络交换机,若是该千M网络交换机断电,我想知道crs的驱逐节点的算法是怎么样的?Oracle 大连 GCS 答复&am…

qt练习11 鼠标,按键,滚轮事件学习

源代码: http://files.cnblogs.com/hnrainll/event.zip

python3 tkinter电子书_python3 tkinter实现添加图片和文本

本文在前面文章基础上介绍tkinter添加图片和文本,在这之前,我们需要安装一个图片库,叫Pillow,这个需要下载exe文件,根据下面图片下载和安装。下载完后直接双击安装exe,默认点击下一步,直到安装完…

自动化运维之SaltStack,批量安装httpd实战

SaltStack原理 SaltStack由Master和Minion构成,Master 是服务端, 表示一台服务器;Minion是客户服务端,表示多台服务器。在Master上发送命令给符合条件的Minion,Minin就会执行相应的命令,Master和Minion之间是通过ZeroM…

实时显示系统时间

CTime time;CString m_time;void CtimeDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码 SetTimer(1,1000,NULL);}void CtimeDlg::OnTimer(UINT_PTR nIDEvent){// TODO: 在此添加消息处理程序代码和/或调用默认值 timeCTime::GetCurrentTime(); …

python创建图片对应的csv格式_Python:如何从csv文件创建图形节点和边?

你可以用另一个COLATIC和COLATIC来建立一个COLATIC/COLATIC。然后将图“投影”到datetime节点上—如果两个datetime都链接到ColA/ColC节点,则在它们之间创建一个链接。在下面的代码展示了一种创建无向图的方法。我不明白你的例子里的指示是什么意思。在import csvim…