-- 引子--
由于调试需要,需直接往数据库里写入二进制数据。本来这些数据是由上层软件来写的,用的是C#。为了熟悉C语言的数据库操作,还是决定用C来写这段调试代码。
概况:
表名:Task
涉及的字段及属性:
NumDest:int(11) 用于存储目标数目
destIDs: blob 用于存储具体的目标ID
废话不多说,入正题。
--二进制数据写入--
二进制数据最为常见的就是图片等一些文件信息。虽然我这里不是这类型信息,但确实是二进制数据。
具体步骤:
1、定义一个buffer(如数组)来存储sql语句
2、把涉及到二进制数据之前的sql语句添加到buffer中,可用sprintf或strcpy等。
3、用mysql_real_escape_string()函数添加二进制数据到buffer中。
4、加上剩余的sql语句,形成完整的sql语句。
5、利用mysql_real_query()函数来执行sql语句。
具体代码如下:
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
MYSQL mysql;
char sql[256], *end;
int index, i;
uint32_t *destIDs;
if(argc != 2)
{
printf("enter error!\n");
exit(1);
}
index = atoi(argv[1]);
printf("index: %d\n", index);
destIDs = (uint32_t *)malloc(index * sizeof(uint32_t));
if(destIDs == NULL)
printf("malloc error\n");
for(i=0; i
destIDs[i] = i + 1;
mysql_init(&mysql);
if(!(mysql_real_connect(&mysql, "localhost", "root", "654321", "dbname", 0, NULL, 0)))
{
fprintf(stderr, "Couldn't connect to engine!\n%s\n", mysql_error(&mysql));
perror("");
exit(1);
}
sprintf(sql, "INSERT INTO Task(NumDest, DestIDs) VALUE (%u, ", index );
end = sql + strlen(sql)