sqlite3数据库存取和取出图片
2017-08-21 13:12
393 查看
近期学习使用sqlite3数据库,有一个将图片读取到数据库中的练习,方式是将图片信息转换成二进制形式进行读取。现将代码帖上,欢迎一起
学习!!!
-------------------------------------------------将图片信息写入到数据库----------------------------------------
--------------------------------------------读取图片二进制信息------------------------------------------------
学习!!!
-------------------------------------------------将图片信息写入到数据库----------------------------------------
#include <stdio.h> #include <sqlite3.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <sys/stat.h> int main(int argc,char *argv[]) { if(argc != 2) { printf("Usage :%s <imgName>\n",argv[0]); return 1; } //打开图片文件,读取文件大小信息 int fd = open(argv[1],O_RDONLY); if(fd <0) { perror("open error:"); return 2; } //读取文件信息 struct stat st; fstat(fd,&st); int imgSize = st.st_size; void *addr = malloc(imgSize); if(!addr) { perror("malloc error:"); return 2; } read(fd,addr,imgSize);//将fd中的二进制内容读取到addr中,大小为imgSize close(fd);//关闭文件指针 //数据库操作 sqlite3 *db; int ret = sqlite3_open("img.db",&db);//打开数据库,前提是数据库要存在,且有相应的表 if(ret != SQLITE_OK) { fprintf(stderr,"open db error:%s\n",sqlite3_errmsg(db)); sqlite3_close(db);//关闭数据库 return 2; } //进行插入数据操作 char *insertsql = "insert into img_tb values(?,?);"; sqlite3_stmt *stmt; ret = sqlite3_prepare_v2(db,insertsql,strlen(insertsql),&stmt,NULL); if(ret != SQLITE_OK) { fprintf(stderr,"prepare db error:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); } sqlite3_bind_text(stmt,1,argv[1],strlen(argv[1]),NULL);//绑定文本 sqlite3_bind_blob(stmt,2,addr,imgSize,NULL);//绑定二进制 //执行数据库操作 sqlite3_step(stmt); //销毁语句 sqlite3_finalize(stmt); sqlite3_close(db); free(addr); return 0; }
--------------------------------------------读取图片二进制信息------------------------------------------------
#include <stdio.h> #include <sqlite3.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <sys/stat.h> int main(int argc,char *argv[]) { sqlite3 *db; //打开数据库 int ret = sqlite3_open("img.db",&db); if(ret != SQLITE_OK) { fprintf(stderr,"open db error:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); return 2; } //查询操作 char *selectsql = "select imgName,imgData from img_tb;"; sqlite3_stmt *stmt; ret = sqlite3_prepare_v2(db,selectsql,-1,&stmt,NULL); if(ret != SQLITE_OK) { fprintf(stderr,"prepare db error:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); return 2; } ret= sqlite3_step(stmt);//执行 const char *imgName; const void *addr; int imgSize; while(ret == SQLITE_ROW)//如果执行成功就写入到文件描述符 { imgName = sqlite3_column_text(stmt,0); addr = sqlite3_column_blob(stmt,1); imgSize = sqlite3_column_bytes(stmt,1); printf("imgName = %s,imgSize = %d\n",imgName,imgSize); int fd = open(imgName,O_WRONLY | O_CREAT ,0666); if(fd < 0) { perror("open error:"); return 0; } write(fd,addr,imgSize); close(fd); ret= sqlite3_step(stmt);//执行 } sqlite3_finalize(stmt); sqlite3_close(db); return 0; }
相关文章推荐
- 图片以二进制的方式存入数据库,以及取出图片
- c#数据库存取图片的三种方式
- C#中将图片转化为byte[]在数据库中存取
- 向数据库中存取图片(BITMAP)
- 关于数据库存取图片的些许事例
- android开发之数据库存取图片
- VB多类图片数据库存取技巧
- iOS 数据储存--SQLite 操作数据库-FMDB,sqlite数据类型,保存图片,demo
- 使用C#进行图片的数据库存取
- 用ADO.NET Entity Framework存取数据库中的图片
- 将图片以二进制数组存入数据库,从数据库中取出转为图片
- Android用LitePal操作数据库存取图片
- jdbc将图片(二进制文件如电影,音乐等)从数据库取出
- SQLite数据库的使用(图片在数据库中的存取)
- 如何通过java或jsp向数据库存取二进制图片
- 图片存取数据库(java)
- ASP.Net数据库如何存取图片
- C#操作数据库中存取图片文件的方法
- 小谈c#数据库存取图片的方式
- JDBC实现图片存取数据库(1)