mysql 批量保存图片 需要用到往 longblob 里面插入图片。。。。但是直接用 insert into 会出现有时能传有的不能插进去。。于是换招。。。。

#include

#include

#include

#include

#define STRING_SIZE 50

#define INSERT_SAMPLE "INSERT INTO testtable2 VALUES(?,?)"

int main(int argc, char **argv)

{

MYSQL *conn;

conn = mysql_init(NULL);

if (conn == NULL) {

printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));

exit(1);

}

if (mysql_real_connect(conn, "localhost", "user", "pass", "database", 0, NULL, 0) == NULL) {

printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));

exit(1);

}

/*if (mysql_query(conn, "create table testtable2(name varchar(30),id int)")) {

printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));

exit(1);

}

MYSQL_RES* result = mysql_store_result(conn);

int num_fields = mysql_num_fields(result);

MYSQL_ROW *row;

int i;

while ((row = mysql_fetch_row(result)))

{

for(i = 0; i < num_fields; i++)

{

printf("%s ", row[i] ? row[i] : "NULL");

}

printf("\n");

}

mysql_free_result(result);*/

MYSQL_STMT *stmt;

MYSQL_BIND bind[2];

my_ulonglong affected_rows;

int param_count;

short small_data;

int int_data;

char str_data[STRING_SIZE];

unsigned long str_length;

my_bool is_null;

/* Prepare an INSERT query with 3 parameters */

/* (the TIMESTAMP column is not named; the server */

/* sets it to the current date and time) */

stmt = mysql_stmt_init(conn);

if (!stmt)

{

fprintf(stderr, " mysql_stmt_init(), out of memory\n");

exit(0);

}

if (mysql_stmt_prepare(stmt, INSERT_SAMPLE, strlen(INSERT_SAMPLE)))

{

fprintf(stderr, " mysql_stmt_prepare(), INSERT failed\n");

fprintf(stderr, " %s\n", mysql_stmt_error(stmt));

exit(0);

}

fprintf(stdout, " prepare, INSERT successful\n");

/* Get the parameter count from the statement */

param_count= mysql_stmt_param_count(stmt);

fprintf(stdout, " total parameters in INSERT: %d\n", param_count);

if (param_count != 2) /* validate parameter count */

{

fprintf(stderr, " invalid parameter count returned by MySQL\n");

exit(0);

}

/* Bind the data for all 3 parameters */

memset(bind, 0, sizeof(bind));

/* INTEGER PARAM */

/* This is a number type, so there is no need

to specify buffer_length */

/* STRING PARAM */

bind[0].buffer_type= MYSQL_TYPE_STRING;

bind[0].buffer= (char *)str_data;

bind[0].buffer_length= STRING_SIZE;

bind[0].is_null= 0;

bind[0].length= &str_length;

/* SMALLINT PARAM */

bind[1].buffer_type= MYSQL_TYPE_LONG;

bind[1].buffer= (char *)&small_data;

bind[1].is_null= &is_null;

bind[1].length= 0;

/* Bind the buffers */

if (mysql_stmt_bind_param(stmt, bind))

{

fprintf(stderr, " mysql_stmt_bind_param() failed\n");

fprintf(stderr, " %s\n", mysql_stmt_error(stmt));

exit(0);

}

/* Specify the data values for the first row */

int_data= 10; /* integer */

strncpy(str_data, "MySQL", STRING_SIZE); /* string */

str_length= strlen(str_data);

/* INSERT SMALLINT data as NULL */

is_null= 1;

/* Execute the INSERT statement - 1*/

if (mysql_stmt_execute(stmt))

{

fprintf(stderr, " mysql_stmt_execute(), 1 failed\n");

fprintf(stderr, " %s\n", mysql_stmt_error(stmt));

exit(0);

}

/* Get the total number of affected rows */

affected_rows= mysql_stmt_affected_rows(stmt);

fprintf(stdout, " total affected rows(insert 1): %lu\n",

(unsigned long) affected_rows);

if (affected_rows != 1) /* validate affected rows */

{

fprintf(stderr, " invalid affected rows by MySQL\n");

exit(0);

}

/* Specify data values for second row,

then re-execute the statement */

int_data= 1000;

strncpy(str_data, "The most popular Open Source database",STRING_SIZE);

str_length= strlen(str_data);

small_data= 1000; /* smallint */

is_null= 0; /* reset */

/* Execute the INSERT statement - 2*/

if (mysql_stmt_execute(stmt))

{

fprintf(stderr, " mysql_stmt_execute, 2 failed\n");

fprintf(stderr, " %s\n", mysql_stmt_error(stmt));

exit(0);

}

/* Get the total rows affected */

affected_rows= mysql_stmt_affected_rows(stmt);

fprintf(stdout, " total affected rows(insert 2): %lu\n",

(unsigned long) affected_rows);

if (affected_rows != 1) /* validate affected rows */

{

fprintf(stderr, " invalid affected rows by MySQL\n");

exit(0);

}

/* Close the statement */

if (mysql_stmt_close(stmt))

{

fprintf(stderr, " failed while closing the statement\n");

fprintf(stderr, " %s\n", mysql_stmt_error(stmt));

exit(0);

}

mysql_close(conn);

}

需要注意的有几点:

1  对于上面的绑定过程,首先指定数据类型,数据的指针,以及长度,其中,数据的指针所指向的内存是不能改变的,也就是说在绑定时,指定了块内存区域之后,不同的行的数据,需要为这个区域进行strcpy相应的字符串内容,而不能重新指向一个新的内存,否则虽然可以插入到数据库之中,但是没有数据的,即是空行。

2 对于my_bool类型,如果为1,即是代表这个参数在插入数据库的时候为null值,如果为0,则会插入这个数据,这样做法,可以用于控制,那么数据需要插入到数据库之中,那些不需要。

3 以上的操作是mysql的c语言的操作方法,mysql也提供了相应的mysql++的类库,用于c++对于数据库的操作,名字空间为mysqlpp。

4 另外提供一个mysql的c语言操作的一个引导例子,http://zetcode.com/tutorials/mysqlcapitutorial/,讲的比较全,但是好像没有preparestatement的例子.

用c 在mysql上存图片_C 批量保存图片进 mysql 利用MYSQL_BIND插入longblob相关推荐

  1. c#form+mysql储存读取图片_C#从SQL server数据库中读取l图片和存入图片

    本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类.BinaryReader把图片读成字节的形式,赋给一 ...

  2. c 连接mysql怎么增删改_C++ API方式连接mysql数据库实现增删改查

    这里复制的 http://www.bitscn.com/pdb/mysql/201407/226252.html 一.环境配置 1,装好mysql,新建一个C++控制台工程(从最简单的弄起,这个会了, ...

  3. java 向 mysql数据库存储图片_基于java向mysql数据库中存取图片

    import java.io.*; import java.sql.*; import java.sql.DriverManager; import java.sql.ResultSet; impor ...

  4. mysql jdbc路径,mysql转存数据库后,如何修改jdbc:mysql的路径

    我将数据库first.sql转存到我的站点web/webroot/MySQL文件夹里. 绝对路就是E:\JSP\web\WebRoot\MySQL\first.sql 我应该如何改写这句话 Strin ...

  5. mysql blob存储图片_显示存储在mysql blob中的图像

    当我运行下面的代码时,它显示一个图像,该图像作为blob变量存储在mysql Db中.问题是我是否回声了其他任何东西,甚至像echo'--------'这样简单的东西:在我调用图像之前,图像将不会显示 ...

  6. mysql 字段存文件_使用数据库(mysql)字段保存文件

    数据库:mysql + mybatis 文件:本项目保存的是excel文件,其他文件应该也是适用的 最近由于项目原因,需将文件保存到数据库中,最先开始设计新增一个类型为blob的字段,结果保存没有问题 ...

  7. mysql odbc c语言_C语言ODBC操作MySQL数据库(示例代码)

    数据库及其编程API来源于不同的背景,开发人员可以从众多的数据库中选择一种,每种数据库都有自己的一套编程API,这就为数据库编程造成了很大的局限性.SQL是标准化数据库编程接口的一种尝试,然而各种数据 ...

  8. c#如何wmf图片转换成png图片_C# 批量转换图片格式 支持/JPG/TIF/PNG/WMF/GIF等

    C# 批量转换图片格式实例源码,可以在BMP/JPG/TIF/PNG/WMF/GIF这几种格式之间批量转换,是否支持逆转换,这个未测试,有兴趣的自己下载源码编译一下吧.本源码实现的原理:将转换过程写入 ...

  9. python从mysql导出大量数据_python批量导出导入MySQL用户的方法

    数据库迁移(A -> B),需要把用户也迁移过去,而用户表(mysql.user)有上百个用户.有2种方法进行快速迁移: 1,在同版本的条件下,直接备份A服务器的mysql数据库,还原到B服务器 ...

最新文章

  1. 2018-3-5 (论文—网络评论中结构化信息处理的应用于研究)笔记三(互信息,信息增益,期望交叉熵,基于词频的方法,CHI统计)
  2. 【LeetCode】1. Two Sum
  3. 从易到难,针对复杂问题的无监督式问题分解方法
  4. java中List与Map的使用
  5. C++中的继承(一)
  6. android itool 备份,教您如何将Android SMS导入iPhone
  7. 图像处理之特征描述与匹配
  8. java opencv bytearray转mat_如何用Python+OpenCV处理图像色彩?终于有人讲明白了
  9. 吴恩达机器学习作业5.偏差和方差
  10. android单元测试作用,Android单元测试源码解读
  11. django-分页器
  12. java String.replaceAll中特殊字符问题
  13. 反射使用 非空表向空表赋值
  14. Dubbo框架协议总结
  15. spring与security做项目的时候,控制台一直输出显示favicon.ico错误,解决方案!
  16. VB.net小技巧——VB中调用matlab
  17. 数据评估:SD(标准差), 方差, 方差分析(ANOVA)
  18. 【数据结构基础_双向链表(有[*pHead]和[*pEnd])_(C++)】
  19. 《架构设计2.0大型分布式系统架构方法论与实践》三高笔记
  20. 文本分类模型学习笔记

热门文章

  1. 谷歌OKR工作法|目标管理法|企业团队个人效率提升「吱序APP」
  2. 普洱茶冲泡|你的茶器选对了吗?
  3. 买100送50相当于打了几折?
  4. 关于印象笔记的扫描宝——简单的图像背景去除(去底色)算法小结
  5. 群晖NAS 7.X 搭建个人博客网站并发布公网 3/8
  6. C#解决串口通信中接收数据时延迟处理与缓存处理的方法
  7. 【openEuler系列】配置本地yum源
  8. 【数论】求素数的三种方法
  9. UC浏览器的抓包分析
  10. 嵌入式设计 | 基于51单片机的TEA5767 FM收音机