Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理)

2016-02-19 09:59 40 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理),喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】

在DBMS中线要创建数据库test,table bintest,data字段数据类型用LONGBLOB即可测试
//测试文件c:test.iso,你可以找任何一个文件修改为即可,我找的是一个exe程序,修改为test.iso而已
//最大测试过加入文件大小为650M(一个正真的iso文件)
//注意:还要修改my.ini文件中的max_allowed_packet字段,我设置的是
代码如下:

//max_allowed_packet = 1024M
//#define host "localhost" //mysql server
//#define username "root"
//#define password "674800"
//#define database "test"
//int port = 3306;
// Mysql3.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include Winsock2.h
#include mysql.h
#include string.h
#include stdio.h
#include stdlib.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#pragma comment(lib,"libmysql.lib")
#define INSERT_QUERY "INSERT INTO bintest(id, data) VALUES(NULL, ?)"
#define host "localhost" //mysql server
#define username "root"
#define password "674800"
#define database "test"
int port = 3306;
int get_file_size(char *path, off_t *size)
{
struct stat file_stats;
if(stat(path, &file_stats))
return -1;
*size = file_stats.st_size;
return 0;
}
void test()
{
MYSQL_BIND bind[1];
unsigned long length;
char* pos = NULL;
off_t size;
FILE* fp;
char* filename = "c:test.iso";
if ((get_file_size(filename, &size)) == -1) //得到文件的大小
{
perror("get file size" );
exit(1);
}
if ((pos = (char *)malloc(sizeof(char)*(size+1))) == NULL)
{
perror("malloc buf" );
exit(1);
}
if ((fp = fopen(filename, "rb" )) == NULL) //读文件
{
perror("fopen file" );
exit(1);
}
if ((fread(pos, 1, size, fp)) 0) //读文件失败
{
perror("fread file" );
exit(1);
}
MYSQL *mysql = mysql_init(NULL); //mysql 初始化
if (!mysql)
return;
if (!mysql_real_connect(mysql,host,username,password,"test",port,NULL,0))//链接服务器
{
int ret = mysql_errno(mysql);
mysql_close(mysql);
return;
}
MYSQL_STMT *stmt = mysql_stmt_init(mysql);
if (!stmt)
{
fprintf(stderr, " mysql_stmt_init(), out of memoryn");
exit(0);
}
if (mysql_stmt_prepare(stmt, INSERT_QUERY, strlen(INSERT_QUERY)))
{
fprintf(stderr, "n mysql_stmt_prepare(), INSERT failed");
fprintf(stderr, "n %s", mysql_stmt_error(stmt));
exit(0);
}
memset(bind, 0, sizeof(bind));
//bind[0].buffer_type= MYSQL_TYPE_STRING;
//bind[0].buffer_type = MYSQL_TYPE_LONG;
bind[0].buffer = pos;
//bind[0].buffer_type = MYSQL_TYPE_TINY;
bind[0].buffer_type = MYSQL_TYPE_BLOB;
bind[0].length= &length;
bind[0].is_null= 0;
/* Bind the buffers */
if (mysql_stmt_bind_param(stmt, bind))
{
fprintf(stderr, "n param bind failed");
fprintf(stderr, "n %s", mysql_stmt_error(stmt));
exit(0);
}
int rc =0;
/* Supply data in chunks to server */
if (mysql_stmt_send_long_data(stmt,0, pos, size))
{
fprintf(stderr, "n send_long_data failed");
fprintf(stderr, "n %s", mysql_stmt_error(stmt));
exit(0);
}
// pos += size;
/* Supply the next piece of data */
if (mysql_stmt_send_long_data(stmt,0, pos, size))
{
fprintf(stderr, "n send_long_data failed");
fprintf(stderr, "n %s", mysql_stmt_error(stmt));
exit(0);
}
/* Now, execute the query */
if (mysql_stmt_execute(stmt))
{
fprintf(stderr, "n mysql_stmt_execute failed");
fprintf(stderr, "n %s", mysql_stmt_error(stmt));
exit(0);
}
}
int main()
{
test();
//sleep(1);
return 0;
}

运行结果:

来源:http://www.tulaoshi.com/n/20160219/1592950.html

延伸阅读
《二进制领域》文字流程 操作 X:近身攻击 A:找掩体,爬椅子/按住冲刺 B:拿取物品,按开关 Y:注视 LB:队友指挥,对话选择 RB:装弹/按住大威力能量球 LT:瞄准 RT:射击 LS:角色移动 RS:视角 第一章 边打边跑 一上来主角(名字叫蛋,不,是丹,音译都一样)出现很突兀,和他在一起的是个老黑(代号大波,这作的名字都这么直接...
《二进制领域》视频攻略 《二进制领域》视频攻略(更新中。。。) 《二进制领域》关于进游戏黑边的解决办法 不是游戏版本问题,也不是你电脑问题 是你进游戏没调整的问题 看图吧: 《二进制领域》图文流程攻略 游戏开始教程跟着小胖对话,把语音系统关掉,Q,E,F,空格,是360的4个键.大致自己按一下. .. 过了教程后一路跟小胖走,会遇...
游戏地域《二进制领域》解说视频   解说视频一: 《二进制领域》关于进游戏黑边的解决办法 不是游戏版本问题,也不是你电脑问题 是你进游戏没调整的问题 看图吧: 《二进制领域》图文流程攻略 游戏开始教程跟着小胖对话,把语音系统关掉,Q,E,F,空格,是360的4个键.大致自己按一下. .. 过了教程后一路跟小胖走,会遇到第一波敌人.&...
标签: Web开发
昨天一个在落伍的朋友给的,一个站的所有文件和图片以二进制的方式放进了数据库里,用下面的代码可以把数据库里的文件和图片还原出来。 把得到的数据库名字改成ToMdb.mdb,然后把下面的代码保存成VBS格式。放在同一个目录下,执行这个VBS文件 Dim rs, ws, fso, conn, stream, connStr, theFolder Set rs = CreateObject("ADOD...
《二进制领域》视频流程攻略 游戏简介 《二进制领域》由开发了《如龙》系列的知名制作人名越稔洋打造,是一款追求在线对战乐趣的射击游戏。故事发生在2080年的东京,人类为了生存而与背叛的机器人展开厮杀。《二进制领域》将登陆PS3与XBOX360平台,游戏预定2012年2月发售。 本作中,玩家们将和多名同伴一起行动,采用互相协力来进行战斗的Tea...

经验教程

412

收藏

57
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部