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

2023年 4月 19日 51.4k 0

在DBMS中线要创建数据库test,table bintest,data字段数据类型用LONGBLOB即可测试 //测试文件c:\\test.iso,你可以找任何一个文件修改为即可,我找的是一个exe程序,修改为test.iso而已 //最大测

在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 memory\n"); 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; } 运行结果:

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论