|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
人力成本上的节省,MySQL的用户Spacemonkey实验室的首席执行官MitchPirtle如此表示:“维护MySQL使得你不需要一个年薪15万美元的DBA。克日一项目碰到必要在DB中存储2进制数据流范例文件的成绩,发明经常使用的MySQLAPI都用不了,再研讨,方知有一套专门的API来干这类数据,功效相称壮大的说。
以下即为典范代码---依照申明编译便可用,略加修正便可存储2进制文件
viewplaincopytoclipboardPRint?
/*
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-lmysqlclientmysql_test.cpp
筹办事情:
createdatabasetest;
usetest;
CREATETABLE`bintest`(
`id`int(11)NOTNULLdefault0,
`data`blob
)ENGINE=MyISAM;
*/
#include<mysql.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#defineINSERT_QUERY"INSERTINTObintest(id,data)VALUES(4,?)"
voidtest()
{
MYSQL_BINDbind[1];
unsignedlonglength;
charblog_data[100]={0};
memset(blog_data,0x01,sizeof(blog_data));
char*pos=blog_data;
intsize=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))
{
intret=mysql_errno(mysql);
mysql_close(mysql);
return;
}
MYSQL_STMT*stmt=mysql_stmt_init(mysql);
if(!stmt)
{
fprintf(stderr,"mysql_stmt_init(),outofmemory
");
exit(0);
}
if(mysql_stmt_prepare(stmt,INSERT_QUERY,strlen(INSERT_QUERY)))
{
fprintf(stderr,"
mysql_stmt_prepare(),INSERTfailed");
fprintf(stderr,"
%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;
/*Bindthebuffers*/
if(mysql_stmt_bind_param(stmt,bind))
{
fprintf(stderr,"
parambindfailed");
fprintf(stderr,"
%s",mysql_stmt_error(stmt));
exit(0);
}
intrc=0;
/*Supplydatainchunkstoserver*/
if(mysql_stmt_send_long_data(stmt,0,pos,size))
{
fprintf(stderr,"
send_long_datafailed");
fprintf(stderr,"
%s",mysql_stmt_error(stmt));
exit(0);
}
pos+=size;
/*Supplythenextpieceofdata*/
if(mysql_stmt_send_long_data(stmt,0,pos,size))
{
fprintf(stderr,"
send_long_datafailed");
fprintf(stderr,"
%s",mysql_stmt_error(stmt));
exit(0);
}
/*Now,executethequery*/
if(mysql_stmt_execute(stmt))
{
fprintf(stderr,"
mysql_stmt_executefailed");
fprintf(stderr,"
%s",mysql_stmt_error(stmt));
exit(0);
}
}
intmain()
{
test();
//sleep(1);
return0;
}
MySQL的低成本来自于其简单性吗?它的普及性是由于其低成本吗?其实,在MySQL的最“好”与最“不好”的功能之间没有明显的分界线,但它们组合在一起就形成了一副让我们欣赏的作品。 |
|