先看看网上找的例子代码:
写入:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *dataPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@”sqlite.sqlite”]; NSData *image=UIImagePNGRepresentation([UIImage imageNamed:@"01_02.png"]); NSString *aaa=[[NSString alloc]initWithFormat:@”update cards set c_image=? where id=1″]; sqlite3 *database; if (sqlite3_open([dataPath UTF8String],&database) == sqlITE_OK){ sqlite3_stmt * compliedStatement; sqlite3_prepare(database,[aaa UTF8String],-1,&compliedStatement,0); sqlite3_bind_blob(compliedStatement,1,[image bytes],[image length],NULL); int result=sqlite3_step(compliedStatement); if (result==sqlITE_DONE) { } sqlite3_finalize(compliedStatement); } sqlite3_close(database); [aaa release];
读取:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,YES); NSString *dataPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@”sqlite.sqlite”]; sqlite3 *database; if (sqlite3_open([dataPath UTF8String],&database) == sqlITE_OK){ const char *sqlStatement=”select c_image from cards where id=1″; sqlite3_stmt *compliedStatement; if(sqlite3_prepare(database,sqlStatement,NULL)==sqlITE_OK) { while (sqlite3_step(compliedStatement)==sqlITE_ROW) { int bytes = sqlite3_column_bytes(compliedStatement,0); const void *value = sqlite3_column_blob(compliedStatement,0); if( value != NULL && bytes != 0 ){ NSData *data = [NSData dataWithBytes:value length:bytes]; UIImage *image=[UIImage imageWithData:data]; [imageView setImage:image]; } else{ } } } sqlite3_finalize(compliedStatement); } sqlite3_close(database);
以上,思路就是:sqlite可以存放二进制的字段(blob),故可将图片转成NSData再写入sqlite。读取则是一个逆向过程。
在这里值得一说的是,自己尝试的时候,数据能写入,但是读出却是null。。搞了一个早上,原来是查询语句写错了。。。要细心啊
原文链接:https://www.f2er.com/sqlite/200874.html