数据库中二进制数据图片的读取并存储为文件C++

插入二进制数据https://blog.csdn.net/wjl990316fddwjl/article/details/135334950我们需要将插入的数据进行读取,本文主要介绍如何C++如何将数据库中二进制数据图片进行读取和存储

1、查询数据

cpp 复制代码
sql="select * from t_data";

2、获得查询结果

cpp 复制代码
MYSQL_RES *res=mysql_store_result(&mysql);

3、获取行数据

cpp 复制代码
MYSQL_ROW row=mysql_fetch_row(res);

4、 写入文件

cpp 复制代码
fstream out(filename_out,ios::out|ios::binary);
out.write(row[2],lens[2]);
cpp 复制代码
//查询二进制数据,并保存为文件
	//sql = "select * from t_data limit 1"; //只查找第一个,效率会更高v
	sql = "select * from t_data";
	re = mysql_query(&mysql, sql.c_str());
	if (re != 0)
	{
		cerr << "mysql_query failed" << mysql_error(&mysql) << endl;
	}
	MYSQL_RES* res = mysql_store_result(&mysql);
	if (!res)
	{
		cerr << "mysql_store_result failed" << mysql_error(&mysql) << endl;
	}
	//取一行数据 是一个数组
	MYSQL_ROW row = mysql_fetch_row(res);
	if (!row)
	{
		cerr << "mysql_fetch_row failed" << mysql_error(&mysql) << endl;
	}
    //如果没有size,可以获取size
	//获取每列数据的大小,这个是根据当前的
	unsigned long *lens = mysql_fetch_lengths(res);
	//具体写入文件
	string filename_out = "out_1";
	filename_out += row[1];
	//写入
	fstream out(filename_out,ios::out|ios::binary);

	if (!out.is_open())
	{
		cerr << "open_filename" << filename_out << "falied" << endl;
	}
	out.write(row[2], lens[2]);
	out.close();

查看是否存储成功

注意*****

必须将文件最后进行关闭

复制代码
out.close();

完整代码

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
#include<mysql.h>
#include<thread>
#include<map>
#include<sstream>
#include<fstream>
//计时
#include<chrono>
using namespace std;
using namespace chrono;


int main()
{
	const char* host = "127.0.0.1";
	const char* user = "root";
	const char* password = "******";
	const char* database = "database_test";
	int port = 3306;

	MYSQL mysql;
	mysql_init(&mysql);
	mysql_library_init(0, NULL, NULL);
	//防止乱码
	mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "GBK");

	//支持多条sql语句 CLIENT_MULTI_STATEMENTS   clientflag  默认是不支持的
	//if (!mysql_real_connect(&mysql, host, user, password, database, port, 0, 0))
	if (!mysql_real_connect(&mysql, host, user, password, database, port, NULL, 0))
	{
		cout << "failed to connect" << host << mysql_error(&mysql) << endl;
	}

	else
	{
		cout << "successfully connected " << host <<endl;
	}
	
	


	//查询二进制数据,并保存为文件
	//sql = "select * from t_data limit 1"; //只查找第一个,效率会更高v
	sql = "select * from t_data";
	re = mysql_query(&mysql, sql.c_str());
	if (re != 0)
	{
		cerr << "mysql_query failed" << mysql_error(&mysql) << endl;
	}
	MYSQL_RES* res = mysql_store_result(&mysql);
	if (!res)
	{
		cerr << "mysql_store_result failed" << mysql_error(&mysql) << endl;
	}
	//取一行数据 是一个数组
	MYSQL_ROW row = mysql_fetch_row(res);
	if (!row)
	{
		cerr << "mysql_fetch_row failed" << mysql_error(&mysql) << endl;
	}

	//存取文件 第三个字段取出来
	cout << row[0] << " " << row[1] << " " << row[3] << endl;

	//如果没有size,可以获取size
	//获取每列数据的大小,这个是根据当前的
	unsigned long *lens = mysql_fetch_lengths(res);
	//有几列,这个是根据结果来计算的
	int fnum = mysql_num_fields(res);
	for (int i = 0;i < fnum;i++)
	{
		cout << "[" << lens[i] << "]";
	}
	//具体写入文件
	string filename_out = "out_1";
	filename_out += row[1];
	//写入
	fstream out(filename_out,ios::out|ios::binary);

	if (!out.is_open())
	{
		cerr << "open_filename" << filename_out << "falied" << endl;
	}
	out.write(row[2], lens[2]);
	out.close();

	mysql_close(&mysql);
	mysql_library_end();
	system("pause");
	return 0;
}
相关推荐
http阿拉丁神猫24 分钟前
Go语言入门笔记:从基础到开发环境搭建(二)
开发语言·笔记·golang
不会就选b1 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
Pniubi4 小时前
HashMap的扩容和树化边界
java·开发语言
gCode Teacher 格码致知6 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工6 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留6 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu6 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
zyseo86 小时前
谷歌SEO 准首页词挖掘脚本:找出排在第 8-20 名的隐藏流量
大数据·数据库·人工智能
益莱储中国8 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
xiaogai_gai8 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python