用于在mysql db c ++中存储blob数据的语法

时间:2014-05-14 22:29:43

标签: c++ mysql

尝试将blob数据(int array [128])存储在sql db中。

我的sql语句存在问题

 // temp is a 512 byte char array that was memcpyed from a 512 byte int array
 sprintf(insert, "insert into SiftFeatures(M_Id, FeatureData) values((Select M_Id from Master where M_Id='1'), 'Ab345' )" , temp);
 if(mysql_query(con, insert)){
    fprintf(stderr, "%s\n", mysql_error(con));
 }

这里的问题是当我这样做时,char *终止于空字节(即0000 0000) 我真的不知道如何执行这个sql执行语句。还有另一种方式吗?

2 个答案:

答案 0 :(得分:1)

您需要转义数据。这是一个粗略的例子:

// your array which is to become a blob
int array[128];

// compute the maximum size of the escaped blob
int escaped_size = 2 * sizeof(array) + 1;

// get some storage for the escaped blob
char chunk[escaped_size];

// now escape the blob into the storage
mysql_real_escape_string(con, chunk, (const char*)array, sizeof(array));

// form a query string template and measure its length
const char* query_template = "INSERT INTO SiftFeatures(M_Id, FeatureData) VALUES((Select M_Id from Master where M_Id='1'), '%s')";
size_t template_len = strlen(query_template);

// provide enough space to hold the rendered query template
// (i.e. the query text and the escaped blob)
int query_buffer_len = template_len + escaped_size;
char query[query_buffer_len];

// now render the final query string (template plus escaped blob)
int query_len = snprintf(query, query_buffer_len, query_template, chunk);

// execute the query
mysql_real_query(con, query, query_len);

答案 1 :(得分:0)

我承认,我在这个上作弊。

我将二进制数据写入文件,然后发出MySql语句LOAD DATA INFILE:
Syntax MySQL LOAD DATA INFILE

另一种方法是使用预准备语句和setBlob类的sql::PreparedStatement方法,请参阅prepared_statement.h文件夹中的cppconn

在网上搜索“mysql load blob”或“mysql connector c ++ store blob”。