当前位置: 首页 > 图文教程 > 数据库 > MYSQL > Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)

MYSQL
提高MySQL 查询效率的三个技巧
mysql同步复制搭建方法指南详细步骤
详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始
MySQL Replace INTO的使用
mysql 分页优化解析
同时运行多个MySQL服务器的方法
mysql主从服务器同步心得体会
删除mysql数据库中的重复数据记录
mysql忘记密码的解决方法
mysql替换表中的字符串的sql语句
Lost connection to MySQL server during query的解决
mysql出现Error performing load command的解决方法
mysql中的“money”类型说明
mysql常见错误集锦
MYSQL administrator 使用
MYSQL初学者命令行使用指南
MySQL的Query Cache原理分析
linux下改良版本mysqldump来备份MYSQL数据库
mysql删除表中某一字段重复的记录
log引起的mysql不能启动的解决方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 95 ::
收藏到网摘: n/a

MySql2.cpp : Defines the entry point for the console application. #include "stdafx.h"
//是前一篇的姊妹篇
//代码来自网络,我学习整理了一下,测试通过,下面的参数
//需要设置为你自己的
//在DBMS中线要创建数据库www,table www,file字段数据类型用LONGTEXT即可测试
//测试文件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;
#include <Winsock2.h>
#include <stdio.h>
#include <mysql.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define host "localhost" //mysql server
#define username "root"
#define password "674800"
#define database "www"
int port = 3306;
#pragma comment(lib,"libmysql.lib")
//得到文件的大小(字节数)
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;
}
int main(int argc, char *argv[])
{
char *filename=NULL;
off_t size;
MYSQL *conn=NULL;
MYSQL_RES *res_set=NULL;
MYSQL_ROW row;
MYSQL_FIELD *field=NULL;
int i, flag;
char *sql; //sql语句
FILE *fp;
char *buf;
int n=256;
char *end;
unsigned long *length;
/* if (argc != 2)
{
printf("Usage: %s srcfile\n", argv[0]);
exit(1);
}
*/
filename = "c:\\test.iso";
if ((get_file_size(filename, &size)) == -1) //得到文件的大小
{
perror("get file size" );
exit(1);
}
if ((buf = (char *)malloc(sizeof(char)*(size+1))) == NULL)
{
perror("malloc buf" );
exit(1);
}
if ((fp = fopen(filename, "rb" )) == NULL) //读文件
{
perror("fopen file" );
exit(1);
}
if ((n = fread(buf, 1, size, fp)) < 0) //读文件失败
{
perror("fread file" );
exit(1);
}
sql = (char *)malloc(sizeof(char)*n*2+256); //2n+1+strlen(other sql)
if (sql == NULL)
{
perror("malloc sql" );
exit(1);
}
conn = mysql_init(NULL);//生产一个mysql对象
if (conn == NULL)
{
printf("init mysql, %s\n", mysql_error(conn));
exit(1);
}
if ((mysql_real_connect(conn, host, username, password, database, port, NULL, 0)) == NULL) //连接服务器
{
printf("connect mysql, %s\n", mysql_error(conn));
exit(1);
}
strcpy(sql, "insert into www(id, name, file) values(NULL, 'peter', " );
end = sql;
end += strlen(sql); //point sql tail
//convert NUL(ASCII 0)、'\n'、'\r'、'\''、'''、'"'和Control-Z and so on
*end++ = '\'';
end += mysql_real_escape_string(conn, end, buf, n);
*end++ = '\'';
*end++ = ')';
flag = mysql_real_query(conn, sql, (unsigned int)(end-sql));
if (flag != 0)
{
printf("insert failed, %s\n", mysql_error(conn));
exit(1);
}
if ((mysql_real_query(conn, "SELECT file FROM www where id=1", 31)) != 0)
{
printf("insert failed, %s\n", mysql_error(conn));
exit(1);
}
res_set = mysql_store_result(conn);
fclose(fp);
fp = NULL;
fp = fopen("c:\\123.iso", "wb" );
while ((row = mysql_fetch_row(res_set)) != NULL)
{
length = mysql_fetch_lengths(res_set);
for (i=0; i<mysql_num_fields(res_set); i++)
{
fwrite(row[0], 1, length[0], fp);
//printf("%s\n",row[0]);
}
}
fclose(fp);
mysql_close(conn);
free(sql);
free(buf);
sql = NULL;
return 0;
}

运行结果: