近日一项目遇到需要在DB中存储2进制数据流类型文件的问题,发现常用的MySQL API都用不了,再研究,方知有一套专门的API来干这种数据,功能相当强大的说。
以下即为范例代码 --- 按照说明编译即可用,稍加修改即可存储2进制文件
view plaincopy to clipboardPRint? /* 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 <mysql.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #define INSERT_QUERY "INSERT INTO bintest(id, data) VALUES(4, ?)" void test() { MYSQL_BIND bind[1]; unsigned long length; char blog_data[100] = {0}; 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.xxx", "root", "db_user_name", "test", 3306, NULL, 0)) { int ret = mysql_errno(mysql); mysql_close(mysql); return; } MYSQ |