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

吧友沸腾

吧友沸腾

2016-02-19 09:59

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

运行结果:
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理)

Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)

编程语言 网络编程
Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

处理二进制数据

ASP
处理二进制数据

MYSQL中如何存取二进制文件

PHP
MYSQL中如何存取二进制文件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

整理C# 二进制十进制十六进制 互转

编程语言 网络编程
整理C# 二进制十进制十六进制 互转

二进制领域攻略

电脑网络
二进制领域攻略

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Oracle下时间转换在几种语言中的实现

Oracle下时间转换在几种语言中的实现

如何关闭Windows 8系统

如何关闭Windows 8系统
下拉加载更多内容 ↓