作为一个程序员,CSDN对我的编程带来了很多帮助和提高,在这里可以让你找到很多开发过程中遇到的问题的解决办法,今天也写点自己积累的东西跟大家分享一下,希望对需要的人有帮助.
资料背景:
之前项目一直使用Oracle数据,最近换工作,公司使用的为mysq数据库,项目中需要将A数据库保存的图片数据转存到另外一个远程数据库B,存储图片使用的类型为longblob,LongBlob (lang binary large object),二进制大对象,是一个可以存储二进制文件的容器。longblob这里不做详细介绍。下面将如何进行数据存储的操作贴出来,只是一个简单的demo,实际应用还要根据实际需求修改,但也包含了图片下载和图片转存的功能。代码如下:
- #include <my_global.h>
- #include <mysql.h>
- #include <string.h>
- void finish_with_error(MYSQL *con)
- {
- fprintf(stderr, "%s\n", mysql_error(con));
- mysql_close(con);
- exit(1);
- }
- int main(int argc, char **argv)
- {
- /*测试用将图片保存本地*/
- FILE *fp = fopen("woman2.jpg", "wb");
- if (fp == NULL)
- {
- fprintf(stderr, "cannot open image file\n");
- exit(1);
- }
- /*连接数据A*/
- MYSQL *con = mysql_init(NULL);
- if (con == NULL)
- {
- fprintf(stderr, "mysql_init() failed\n");
- exit(1);
- }
- if (mysql_real_connect(con, "localhost", "root", "1qazxsw2#",
- "QR", 0, NULL, 0) == NULL)
- {
- finish_with_error(con);
- }
- /*查询A数据库的图片数据*/
- if (mysql_query(con, "SELECT IMG_B FROM QR_IMG WHERE QRNUM='3691746087775941894'"))
- {
- finish_with_error(con);
- }
- MYSQL_RES *result = mysql_store_result(con);
- if (result == NULL)
- {
- finish_with_error(con);
- }
- MYSQL_ROW row = mysql_fetch_row(result);
- unsigned long *lengths = mysql_fetch_lengths(result);
- if (lengths == NULL) {
- finish_with_error(con);
- }
- /*连接远程数据B*/
- MYSQL *con1 = mysql_init(NULL);
- if (con1 == NULL)
- {
- fprintf(stderr, "mysql_init() failed\n");
- exit(1);
- }
- if (mysql_real_connect(con1, "localhost", "root", "1qazxsw2#",
- "card", 0, NULL, 0) == NULL)
- {
- finish_with_error(con);
- }
- /*图片数据进行转义,存储图片的关键步骤*/
- char chunk[2*lengths[0]+1];
- mysql_real_escape_string(con, chunk, row[0], lengths[0]);
- /*数据插入B数据库*/
- char *st = "INSERT INTO card_pack(code_img) VALUES('%s')";
- size_t st_len = strlen(st);
- char query[st_len + 2*lengths[0]+1];
- int len = snprintf(query, st_len + 2*lengths[0]+1, st, chunk);
- if (mysql_real_query(con1, query, len))
- {
- finish_with_error(con);
- }
- /*保存到本地,用来测试用判断图片时候下载成功*/
- fwrite(row[0], lengths[0], 1, fp);
- if (ferror(fp))
- {
- fprintf(stderr, "fwrite() failed\n");
- mysql_free_result(result);
- mysql_close(con);
- exit(1);
- }
- int r = fclose(fp);
- if (r == EOF) {
- fprintf(stderr, "cannot close file handler\n");
- }
- mysql_free_result(result);
- mysql_close(con);
- mysql_close(con1);
- exit(0);
- }
借鉴资料: 点击打开链接 http://zetcode.com/tutorials/mysqlcapitutorial/