mysql 二進位製流 用mysql儲存二進位制資料流

2021-10-17 22:59:15 字數 2918 閱讀 3497

用mysql儲存二進位制資料流,閱讀用mysql儲存二進位制資料流,近日一專案遇到需要在db中儲存2進製資料流型別檔案的問題,發現常用的mysql api都用不了,再研究,方知有一套專門的api來幹這種資料,功能相當強大的說。以下即為範例** --- 按照說明編譯即可用,稍加修改即可儲存2進製檔案

/* mysql資料庫儲存二進位制資料 linux 用途: 用 mysql_stmt_send_long_data()來向blob欄位寫入2進製資料流. 注意點:需要注意的是bind結構的buffer_type欄位,必須與要輸入的資料型別相符, 如:只寫入乙個long 資料,則用mysql_type_long,寫入字元流,用mysql_type_string, 寫入2進製資料流,用mysql_type_blob 具體這個引數各字段的含義參見 mysql5.0手冊 compile: g++ -i/usr/include/mysql -l/usr/lib/mysql -lmysqlclient mysql_test.cpp 準備工作:

create database test;

use test;

create table `bintest` (

`id` int(11) not null default '0',

`data` blob

) engine=myisam;

#include

#include

#include

#include

#define insert_query "insert into bintest(id, data) values(4, ?)"

void test()

mysql_bind bind[1];

unsigned long length;

char blog_data[100] = ;

memset(blog_data, 0x01, sizeof(blog_data));

char* pos = blog_data;

int size = 50;

mysql *mysql = mysql_init(null);

if (!mysql) return;

if (!mysql_real_connect(mysql,

"192.168.xx.***",

"root",

"db_user_name",

"test",

3306, 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 = blog_data;

//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;

mysql二進位制 MySql二進位制連線方式詳解

使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...

mysql二進位制恢復 mysql二進位制日誌恢復

二進位制日誌匯出 1.按時間節點匯出 no defaults 用來對mysql5.5之前mysqlbinlog命令報錯 mysqlbinlog no defaults start date 2017 08 08 15 04 04 stop date 2017 08 08 15 12 00 progr...

mysql二進位制方式 MySql二進位制連線方式詳解

使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 複製 如下 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示...