尝试将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执行语句。还有另一种方式吗?
答案 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”。