mysql存储过程:用mysql存储 2进制数据流来源: 发布时间:星期二, 2009年2月3日 浏览:35次 评论:0
="t18">近日项目遇到需要在DB中存储2进制数据流类型文件问题发现常用mysql API都用不了再研究方知有套专门API来干这种数据功能相当强大说
以下即为范例代码 --- 按照介绍说明编译即可用稍加修改即可存储2进制文件 view plaincopy to clipboardpr? /* mysql数据库存储 2进制数据 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//mysql -L/usr/lib/mysql -lmysqlclient mysql_test.cpp 准备工作: create database test; use test; CREATE TABLE `best` ( `id` (11) NOT NULL default '0', `data` blob ) ENGINE=MyISAM; */ # <mysql.h> # <.h> # <stdio.h> # <stdlib.h> # INSERT_QUERY "INSERT INTO best(id, data) VALUES(4, ?)" void test { MYSQL_BIND bind[1]; unsigned long length; char blog_data[100] = {0}; mem(blog_data, 0x01, (blog_data)); char* pos = blog_data; size = 50; MYSQL *mysql = mysql_init(NULL); (!mysql) ; (!mysql_real_connect(mysql, "192.168.xx.xxx", "root", "db_user_name", "test", 3306, NULL, 0)) { ret = mysql_errno(mysql); mysql_close(mysql); ; } MYSQL_STMT *stmt = mysql_stmt_init(mysql); (!stmt) { fprf(stderr, " mysql_stmt_init, out of memory\n"); exit(0); } (mysql_stmt_prepare(stmt, INSERT_QUERY, strlen(INSERT_QUERY))) { fprf(stderr, "\n mysql_stmt_prepare, INSERT failed"); fprf(stderr, "\n %s", mysql_stmt_error(stmt)); exit(0); } mem(bind, 0, (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 */ (mysql_stmt_bind_param(stmt, bind)) { fprf(stderr, "\n param bind failed"); fprf(stderr, "\n %s", mysql_stmt_error(stmt)); exit(0); } rc =0; /* Supply data in chunks to server */ (mysql_stmt_send_long_data(stmt,0, pos, size)) { fprf(stderr, "\n send_long_data failed"); fprf(stderr, "\n %s", mysql_stmt_error(stmt)); exit(0); } pos size; /* Supply the next piece of data */ (mysql_stmt_send_long_data(stmt,0, pos, size)) { fprf(stderr, "\n send_long_data failed"); fprf(stderr, "\n %s", mysql_stmt_error(stmt)); exit(0); } /* Now, execute the query */ (mysql_stmt_execute(stmt)) { fprf(stderr, "\n mysql_stmt_execute failed"); fprf(stderr, "\n %s", mysql_stmt_error(stmt)); exit(0); } } { test; //sleep(1); 0; } 0
相关文章
读者评论发表评论 |