zoukankan      html  css  js  c++  java
  • 在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 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;
    }

  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/byfei/p/6389922.html
Copyright © 2011-2022 走看看