用c 在mysql上存图片_C 批量保存图片进 mysql 利用MYSQL_BIND插入longblob
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相关推荐
- c#form+mysql储存读取图片_C#从SQL server数据库中读取l图片和存入图片
本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类.BinaryReader把图片读成字节的形式,赋给一 ...
- c 连接mysql怎么增删改_C++ API方式连接mysql数据库实现增删改查
这里复制的 http://www.bitscn.com/pdb/mysql/201407/226252.html 一.环境配置 1,装好mysql,新建一个C++控制台工程(从最简单的弄起,这个会了, ...
- java 向 mysql数据库存储图片_基于java向mysql数据库中存取图片
import java.io.*; import java.sql.*; import java.sql.DriverManager; import java.sql.ResultSet; impor ...
- mysql jdbc路径,mysql转存数据库后,如何修改jdbc:mysql的路径
我将数据库first.sql转存到我的站点web/webroot/MySQL文件夹里. 绝对路就是E:\JSP\web\WebRoot\MySQL\first.sql 我应该如何改写这句话 Strin ...
- mysql blob存储图片_显示存储在mysql blob中的图像
当我运行下面的代码时,它显示一个图像,该图像作为blob变量存储在mysql Db中.问题是我是否回声了其他任何东西,甚至像echo'--------'这样简单的东西:在我调用图像之前,图像将不会显示 ...
- mysql 字段存文件_使用数据库(mysql)字段保存文件
数据库:mysql + mybatis 文件:本项目保存的是excel文件,其他文件应该也是适用的 最近由于项目原因,需将文件保存到数据库中,最先开始设计新增一个类型为blob的字段,结果保存没有问题 ...
- mysql odbc c语言_C语言ODBC操作MySQL数据库(示例代码)
数据库及其编程API来源于不同的背景,开发人员可以从众多的数据库中选择一种,每种数据库都有自己的一套编程API,这就为数据库编程造成了很大的局限性.SQL是标准化数据库编程接口的一种尝试,然而各种数据 ...
- c#如何wmf图片转换成png图片_C# 批量转换图片格式 支持/JPG/TIF/PNG/WMF/GIF等
C# 批量转换图片格式实例源码,可以在BMP/JPG/TIF/PNG/WMF/GIF这几种格式之间批量转换,是否支持逆转换,这个未测试,有兴趣的自己下载源码编译一下吧.本源码实现的原理:将转换过程写入 ...
- python从mysql导出大量数据_python批量导出导入MySQL用户的方法
数据库迁移(A -> B),需要把用户也迁移过去,而用户表(mysql.user)有上百个用户.有2种方法进行快速迁移: 1,在同版本的条件下,直接备份A服务器的mysql数据库,还原到B服务器 ...
最新文章
- 2018-3-5 (论文—网络评论中结构化信息处理的应用于研究)笔记三(互信息,信息增益,期望交叉熵,基于词频的方法,CHI统计)
- 【LeetCode】1. Two Sum
- 从易到难,针对复杂问题的无监督式问题分解方法
- java中List与Map的使用
- C++中的继承(一)
- android itool 备份,教您如何将Android SMS导入iPhone
- 图像处理之特征描述与匹配
- java opencv bytearray转mat_如何用Python+OpenCV处理图像色彩?终于有人讲明白了
- 吴恩达机器学习作业5.偏差和方差
- android单元测试作用,Android单元测试源码解读
- django-分页器
- java String.replaceAll中特殊字符问题
- 反射使用 非空表向空表赋值
- Dubbo框架协议总结
- spring与security做项目的时候,控制台一直输出显示favicon.ico错误,解决方案!
- VB.net小技巧——VB中调用matlab
- 数据评估:SD(标准差), 方差, 方差分析(ANOVA)
- 【数据结构基础_双向链表(有[*pHead]和[*pEnd])_(C++)】
- 《架构设计2.0大型分布式系统架构方法论与实践》三高笔记
- 文本分类模型学习笔记