Home >Database >Mysql Tutorial >在Sqlite数据库插入和读取图片数据

在Sqlite数据库插入和读取图片数据

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 15:42:011556browse

在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,然后在数据库添加一行 blob 数据 假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库: 例1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,然后在数据库添加一行 blob 数据

假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库:

例1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

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:存储图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

// 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);  
}

读取图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

// Load images from data base with given image url   
- (NSData*) LoadImagesFromSql: (NSString*) imageLink  
{  
    NSData* data = nil;  
    NSString* sqliteQuery = [NSString stringWithFormat:@"SELECT IMAGE FROM IMAGES WHERE URL = '%@'", imageLink];      
    sqlite3_stmt* statement;  
  
    if( sqlite3_prepare_v2(articlesDB, [sqliteQuery UTF8String]-1&statement, NULL) == SQLITE_OK )  
    {  
        if( sqlite3_step(statement) == SQLITE_ROW )  
        {  
            int length = sqlite3_column_bytes(statement, 0);  
            data       = [NSData dataWithBytes:sqlite3_column_blob(statement, 0) length:length];  
        }  
    }  
  
    // Finalize and close database.  
    sqlite3_finalize(statement);  
  
    return data;  
  
}



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:构造全国省市数据库Next article:数据库备份和还原