Sqlite数据库插入和读取图片数据
2013-01-14 16:02:12 来源:WEB开发网核心提示: 在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,Sqlite数据库插入和读取图片数据,然后在数据库添加一行 blob 数据假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库:CHAR *name =
在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,然后在数据库添加一行 blob 数据
假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库:
CHAR *name = "test"; NSString * nameString = [NSString stringWithCString:name encoding:NSUTF8StringEncoding]; NSString * filePath = [[NSBundle mainBundle] pathForResource:nameString ofType:@"png"]; IF ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { NSData * imgData = UIImagePNGRepresentation([UIImage imageWithContentsOfFile:filePath]); const CHAR * sequel = "insert into test_table(name,image) values(?,?)"; sqlite3_stmt * UPDATE; IF (sqlite3_prepare_v2(DATABASE, sequel, -1, &UPDATE, NULL) == SQLITE_OK) { sqlite3_bind_text(UPDATE, 1, name, -1, NULL); sqlite3_bind_blob(UPDATE, 2, [imgData bytes], [imgData LENGTH], NULL); IF( sqlite3_step(UPDATE) == SQLITE_DONE) { NSLog(@"已经写入数据"); } sqlite3_finalize(UPDATE); } } ELSE { NSLog(@"文件不存在"); } 下面代码从数据库中读取图片二进制数据,然后显示图片: const CHAR * sequel = "select image from test_table where name=?"; sqlite3_stmt * getimg; IF (sqlite3_prepare_v2(DATABASE, sequel, -1, &getimg, NULL) == SQLITE_OK) { CHAR *name = "test"; sqlite3_bind_text(UPDATE, 1, name, -1, NULL); IF(sqlite3_step(getimg) == SQLITE_ROW) { INT bytes = sqlite3_column_bytes(getimg, 0); Byte * VALUE = (Byte*)sqlite3_column_blob(getimg, 1); IF (bytes !=0 && VALUE != NULL) { NSData * DATA = [NSData dataWithBytes:VALUE LENGTH:bytes]; UIImage * img = [UIImage imageWithData:DATA]; UIImageView * aview =[[UIImageView alloc] initWithFrame: CGRectMake(0.0, 0.0, IMAGE_WIDTH, IMAGE_HEIGHT)]; aview.image = img; [SELF.VIEW addSubview:aview]; [aview release]; } } sqlite3_finalize(getimg); }
例2:存储图片
/ Save Small Image Data by given main url - (void) SaveImagesToSql: (NSData*) imgData :(NSString*) mainUrl { NSLog( @"\n*****Save image to SQLite*****\n" ); const char* sqliteQuery = "INSERT INTO IMAGES (URL, IMAGE) VALUES (?, ?)"; sqlite3_stmt* statement; if( sqlite3_prepare_v2(articlesDB, sqliteQuery, -1, &statement, NULL) == SQLITE_OK ) { sqlite3_bind_text(statement, 1, [mainUrl UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_blob(statement, 2, [imgData bytes], [imgData length], SQLITE_TRANSIENT); sqlite3_step(statement); } else NSLog( @"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s", sqlite3_errmsg(articlesDB) ); // Finalize and close database. sqlite3_finalize(statement); }
更多精彩
赞助商链接