当前位置: 首页 > news >正文

网站开发实用技术2.8.5百度推广开户价格

网站开发实用技术2.8.5,百度推广开户价格,茶叶网站策划方案,医药网站制作关于二进制图片的读取和BLOB插入一共包含五步 第一步:初始化 MYSQL_STMT* stmt mysql_stmt_init(&mysql); 第二步:预处理sql语句 mysql_stmt_prepare(stmt,sql,sqllen); 第三步:绑定字段 mysql_stmt_bind_param(stmt,bind); 第四…

关于二进制图片的读取和BLOB插入一共包含五步

第一步:初始化

MYSQL_STMT* stmt = mysql_stmt_init(&mysql);

第二步:预处理sql语句

mysql_stmt_prepare(stmt,sql,sqllen);

第三步:绑定字段

mysql_stmt_bind_param(stmt,bind);

第四步:执行

mysql_stmt_excute(stmt);

第五步:关闭

mysql_stmt_close(stmt);

详细步骤如下:

1、连接数据库;这个就不详细讲解了

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;}

2、创建数据表t_data; 创建好存放二进制数据的表 t_data

注意***:这里的数据类型,必须是blob其他和以前一样

//创建号存放二进制数据的表 t_datastring sql = "";sql="CREATE TABLe IF NOT EXISTS `t_data`(\`id` int AUTO_INCREMENT,\`name` varchar(1024),\`data` blob,\`size` int,\PRIMARY KEY(id)\)";int re = mysql_query(&mysql, sql.c_str());if (re != 0){cout << "failed mysql_error" << mysql_error(&mysql) << endl;}

3、初始化stmt

MYSQL_STMT*stmt=mysql_stmt_init(&mysql);

4、预处理sql语句

// 注意这里的插入必须是???
sql="insert into t_data (name,data,size) values (?,?,?)";

//错误输出是mysql_stmt_error(stmt);和之前不一样哦;

//sql语句,插入数据
// 注意这里的插入必须是???sql = "insert into `t_data` (name,data,size) values (?,?,?)";if (mysql_stmt_prepare(stmt, sql.c_str(), sql.size())){cerr << "mysql_stmt_prepare failed!" << mysql_stmt_error(stmt) << endl;}

5、绑定字段

MYSQL_BIND bind[3]={ 0 };//第一个数据name
bind[0].buffer_type = MYSQL_TYPE_STRING; //name文件名
bind[0].buffer = (char*)filename.c_str();//原图的文件名
bind[0].buffer_length = filename.size();
//(char*) buffer要求的是void*,而c_str()是只读的,所以要转换char*。
//而bind是可以输入可以输出,所以不可以只读。默认const是只读的,但是在这儿是插入数据,不会修改数据,可以用char*bind[1].buffer_type = MYSQL_TYPE_BLOB;// data 文件二进制内容
bind[1].buffer = data; //二进制文件
bind[1].buffer_length = filesize; //文件大小//把文件大小存下来
//从mysql取出来,可以知道文件大小,但是不一定将它取出来,
//经常做显示文件列表,有时候不需要显示二进制。希望有个字段将文件大小存下来bind[2].buffer_type = MYSQL_TYPE_LONG;//长整型,不用直到size,因为是固定大小
bind[2].buffer = &filesize;  //存放指针

5.1、如何filename 和data?

在上述代码的前面需要定义filename和data大小;

//4、打开并读取文件string filename = "mysql.jpg";//打开文件可以有多种方式,可以用c的file fopen,但是这个在vs2017里面说不安全,得设置不安全选项//fopen_s 是多线程安全版本的,到了linux又不行了//为了跨平台,用C++方式读取 fstream//需要知道文件大小和文件二进制  考虑到空间的分配和释放 动态空间//int filesize = 0;//ios::binary必须写,因为是二进制文件,如果是文本文件,无所谓不用加,但是还是加着fstream in(filename, ios::in | ios::binary);//文件是否存在if (!in.is_open()){cerr << "file" << filename << "open failed" << endl;}//fopen//句柄,文件指针移到结尾处//从结尾往前移动,移动0个位置,也就是结尾//判断位置in.seekg(0, ios::end);// 得到文件大小,//文件大小和文件二进制int filesize = in.tellg();//得到大小之后,将文件移到开头,要不然待会读文件就读不到了in.seekg(0, ios::beg);//分配空间大小char* data = new char[filesize];//查看是否读完,不保证一次读完,所以用循环读,可以直到读取了多少int readed = 0;//已经读了多少while (!in.eof()){//in.read(data, filesize); data读什么数据,filesize读多少//指针要进行移位in.read(data + readed, filesize - readed);//上次读了多少字节if (in.gcount()<=0){break;}readed += in.gcount();}in.close();

6、绑定 mysql_stmt_bind_param(stmt, bind)

//6、绑定if (mysql_stmt_bind_param(stmt, bind)!=0) //定义和文档不一致,=表示成功{//cerr错误输出,在重定向的时候,可以分割开来,也可以写到文件当中//cout 标准输出/*cout:写到标准输出的ostream对象;cerr:输出到标准错误的ostream对象,常用于程序错误信息;clog:也是输出标准错误流(这点儿和cerr是一样的),貌似平时很少用到这个啊;*/cerr << "mysql_stmt_bind_param failed" << mysql_stmt_error(stmt) << endl;}

7、执行stmt sql

//7、执行stmt sqlif (mysql_stmt_execute(stmt) != 0){//cerr错误输出cerr << "mysql_stmt_execute failed" << mysql_stmt_error(stmt) << endl;}

8、关闭stmt

mysql_stmt_close(stmt);

9、注意****

9.1、刚才申请了data空间是动态控件,必须要释放

delete []data;

9.2、在读取文件之后,一定要把文件关闭

in.close();

完整代码如下:

#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;}//blob  blob存放二进制// int 最大值大概是2g//1、创建号存放二进制数据的表 t_datastring sql = "";sql="CREATE TABLe IF NOT EXISTS `t_data`(\`id` int AUTO_INCREMENT,\`name` varchar(1024),\`data` blob,\`size` int,\PRIMARY KEY(id)\)";int re = mysql_query(&mysql, sql.c_str());if (re != 0){cout << "failed mysql_error" << mysql_error(&mysql) << endl;}//2、初始化MYSQL_STMT* stmt = mysql_stmt_init(&mysql);//3、预处理sql语句sql = "insert into `t_data` (name,data,size) values (?,?,?)";if (mysql_stmt_prepare(stmt, sql.c_str(), sql.size())){cerr << "mysql_stmt_prepare failed!" << mysql_stmt_error(stmt) << endl;}//4、打开并读取文件string filename = "mysql.jpg";//打开文件可以有多种方式,可以用c的file fopen,但是这个在vs2017里面说不安全,得设置不安全选项//fopen_s 是多线程安全版本的,到了linux又不行了//为了跨平台,用C++方式读取 fstream//需要知道文件大小和文件二进制  考虑到空间的分配和释放 动态空间//int filesize = 0;//ios::binary必须写,因为是二进制文件,如果是文本文件,无所谓不用加,但是还是加着fstream in(filename, ios::in | ios::binary);//文件是否存在if (!in.is_open()){cerr << "file" << filename << "open failed" << endl;}//fopen//句柄,文件指针移到结尾处//从结尾往前移动,移动0个位置,也就是结尾//判断位置in.seekg(0, ios::end);// 得到文件大小,//文件大小和文件二进制int filesize = in.tellg();//得到大小之后,将文件移到开头,要不然待会读文件就读不到了in.seekg(0, ios::beg);//分配空间大小char* data = new char[filesize];//查看是否读完,不保证一次读完,所以用循环读,可以直到读取了多少int readed = 0;//已经读了多少while (!in.eof()){//in.read(data, filesize); data读什么数据,filesize读多少//指针要进行移位in.read(data + readed, filesize - readed);//上次读了多少字节if (in.gcount()<=0){break;}readed += in.gcount();}in.close();//5、绑定字段MYSQL_BIND bind[3] = { 0 };bind[0].buffer_type = MYSQL_TYPE_STRING; //name文件名//(char*) buffer要求的是void*,而c_str()是只读的,所以要转换char*。//而bind是可以输入可以输出,所以不可以只读。默认const是只读的,但是在这儿是插入数据,不会修改数据,可以用char*bind[0].buffer = (char*)filename.c_str();//原图的文件名bind[0].buffer_length = filename.size();bind[1].buffer_type = MYSQL_TYPE_BLOB;// data 文件二进制内容bind[1].buffer = data; //二进制文件bind[1].buffer_length = filesize; //文件大小//把文件大小存下来//从mysql取出来,可以知道文件大小,但是不一定将它取出来,//经常做显示文件列表,有时候不需要显示二进制。希望有个字段将文件大小存下来bind[2].buffer_type = MYSQL_TYPE_LONG;//长整型,不用直到size,因为是固定大小bind[2].buffer = &filesize;  //存放指针//6、绑定if (mysql_stmt_bind_param(stmt, bind)!=0) //定义和文档不一致,=表示成功{//cerr错误输出,在重定向的时候,可以分割开来,也可以写到文件当中//cout 标准输出/*cout:写到标准输出的ostream对象;cerr:输出到标准错误的ostream对象,常用于程序错误信息;clog:也是输出标准错误流(这点儿和cerr是一样的),貌似平时很少用到这个啊;*/cerr << "mysql_stmt_bind_param failed" << mysql_stmt_error(stmt) << endl;}//7、执行stmt sqlif (mysql_stmt_execute(stmt) != 0){//cerr错误输出cerr << "mysql_stmt_execute failed" << mysql_stmt_error(stmt) << endl;}delete [] data;mysql_stmt_close(stmt);mysql_close(&mysql);mysql_library_end();system("pause");return 0;
}

插入成功


文章转载自:
http://wanjiaskywards.gcqs.cn
http://wanjiapassivation.gcqs.cn
http://wanjiahamel.gcqs.cn
http://wanjiaelectrolytic.gcqs.cn
http://wanjiavasoconstrictor.gcqs.cn
http://wanjiafrg.gcqs.cn
http://wanjiariskful.gcqs.cn
http://wanjialessor.gcqs.cn
http://wanjiabushiness.gcqs.cn
http://wanjiacrisscross.gcqs.cn
http://wanjianeuridine.gcqs.cn
http://wanjiamedusan.gcqs.cn
http://wanjialocofoco.gcqs.cn
http://wanjiamiasmal.gcqs.cn
http://wanjiabanjulele.gcqs.cn
http://wanjiaslaver.gcqs.cn
http://wanjiaphilopena.gcqs.cn
http://wanjiagala.gcqs.cn
http://wanjiabaulk.gcqs.cn
http://wanjiadefectivation.gcqs.cn
http://wanjiawrithen.gcqs.cn
http://wanjiawert.gcqs.cn
http://wanjiawhereupon.gcqs.cn
http://wanjiainconceivable.gcqs.cn
http://wanjiaoverclothe.gcqs.cn
http://wanjiashill.gcqs.cn
http://wanjiacandytuft.gcqs.cn
http://wanjiapatelliform.gcqs.cn
http://wanjiareinflame.gcqs.cn
http://wanjiatransconductance.gcqs.cn
http://wanjiacampership.gcqs.cn
http://wanjiatrichomonal.gcqs.cn
http://wanjiaquizzer.gcqs.cn
http://wanjiacorndog.gcqs.cn
http://wanjiasantalin.gcqs.cn
http://wanjialambency.gcqs.cn
http://wanjiakeyman.gcqs.cn
http://wanjiaepicureanism.gcqs.cn
http://wanjiazearalenone.gcqs.cn
http://wanjiadivesture.gcqs.cn
http://wanjiagastriloquism.gcqs.cn
http://wanjiaplunk.gcqs.cn
http://wanjiaetu.gcqs.cn
http://wanjiahexachlorethane.gcqs.cn
http://wanjiatapi.gcqs.cn
http://wanjiacomportment.gcqs.cn
http://wanjiaproviso.gcqs.cn
http://wanjiaamends.gcqs.cn
http://wanjiadruidism.gcqs.cn
http://wanjiahirundine.gcqs.cn
http://wanjiatitmouse.gcqs.cn
http://wanjiaasthenopia.gcqs.cn
http://wanjiaerse.gcqs.cn
http://wanjiagoitre.gcqs.cn
http://wanjiaalular.gcqs.cn
http://wanjiastr.gcqs.cn
http://wanjiachisel.gcqs.cn
http://wanjiadenaturize.gcqs.cn
http://wanjiaept.gcqs.cn
http://wanjiamesorrhine.gcqs.cn
http://wanjiahighball.gcqs.cn
http://wanjiagenette.gcqs.cn
http://wanjiaholidaymaker.gcqs.cn
http://wanjiashorthorn.gcqs.cn
http://wanjiaaerotransport.gcqs.cn
http://wanjiachemigraphic.gcqs.cn
http://wanjiaacouophonia.gcqs.cn
http://wanjiamaidstone.gcqs.cn
http://wanjiapetrophysics.gcqs.cn
http://wanjiaworkless.gcqs.cn
http://wanjianarcotine.gcqs.cn
http://wanjiaexpurgatory.gcqs.cn
http://wanjiapi.gcqs.cn
http://wanjialoadability.gcqs.cn
http://wanjiaheuchera.gcqs.cn
http://wanjiaradiale.gcqs.cn
http://wanjiamotherland.gcqs.cn
http://wanjiarockling.gcqs.cn
http://wanjiastilt.gcqs.cn
http://wanjiaoutrow.gcqs.cn
http://www.15wanjia.com/news/123722.html

相关文章:

  • 驻马店市政府采购电子商城seo全网推广营销软件
  • 初学者拟建网站网易搜索引擎
  • 文山网站建设兼职b2b多平台一键发布
  • 网站建设兆金手指花总淘客推广
  • 认证网站源码长沙百度快速排名优化
  • 在线教育网站流量是怎样做的网站交易
  • 自己做网站价格网站推广教程
  • php网站是什么数据库文件百度站长平台工具
  • 网站建设公司天强科技百度关键词关键词大全
  • 做网站翻页怎么做广州外贸推广
  • 专业做网站厂家软文写作的技巧
  • 淄博哪家公司做网站最好百度推广代理公司
  • 精智WORDPRESS企业主题广州四楚seo顾问
  • 做网站应该怎么做推广引流的10个渠道
  • 沧州网站建设 益志科技网站安全检测
  • 赣县网站制作网站推广哪家好
  • 繁体网站怎么做浏览器下载安装2023版本
  • wordpress网站被黑软文是啥意思
  • 正规的投资公司融资流程seo文章外包
  • 有创意的个人网站西seo优化排名
  • 网页布局的基础搜索引擎优化与推广技术
  • 专业微信网站百度热搜榜排名今日头条
  • 莱芜金点子最新租房信息真人seo点击平台
  • 托管网站代运营靠谱吗
  • 时时彩快3网站开发软文标题写作技巧
  • 怎么用自己的主机做网站服务器app拉新推广代理平台
  • 合肥网站建设教程网络推广seo怎么做
  • 北京成交型网站建设价格宁波seo推广公司排名
  • 朝阳市政府建设招标网站设计网站大全
  • 对于网站建设提出建议网页制作接单