sqlite 3データベースアクセスと画像の取り出し
3071 ワード
最近、sqlite 3データベースの使用を学び、画像情報をバイナリ形式に変換して読み出す練習があります.コードを投稿します.
勉强しろ!
-------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
勉强しろ!
-------------------------------------------------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
if(argc != 2)
{
printf("Usage :%s
",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
",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
",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
#include
#include
#include
#include
#include
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
",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
",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
",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;
}