簡體   English   中英

如何使用FMDB保存和檢索圖像(字節)到SQLite(blob)?

[英]How Can I Save & Retrieve an image (bytes) to SQLite (blob) using FMDB?

我正在制作一個需要從遠程站點(從URL)顯示一些圖像的iOS應用程序,每當用戶進入應該顯示圖像的屏幕時,應用程序就會凍結,直到下載完成。 所以我想將已下載的圖像存儲到名為COVERS的SQLite表中。

這是我如何下載和顯示圖像的代碼:

假設movieCover是一個UIImageView ,對象影片有一個名為cover的NSURL屬性,它包含要下載的圖像的URL。

NSData *cover = [[NSData alloc] initWithContentsOfURL:movie.cover];
movieCover.image = [[UIImage alloc] initWithData:cover];

但是,我想把它改成這樣的東西:

NSData *cover = [appDelegate.dataBase getCoverForMovie:movie];
if( !cover ) {
    cover = [[NSData alloc] initWithContentsOfURL:movie.cover];
    [appDelegate.dataBase setCover:cover ToMovie:movie];
}

movieCover.image = [[UIImage alloc] initWithData:cover];

假設appDelegate是當前ViewController的屬性,而dataBase是AppDelegate的一個屬性,它使用FMDB來操縱DataBase中的數據。

我需要使用以下方法獲取以前保存在數據庫中的封面:

- (NSData *)getCoverForMovie:(Movie *)movie;

但是,如果沒有保存封面,則返回nil。

所以我需要使用該方法保存封面

- (BOOL)saveCover:(NSData *)cover ForMovie:(Movie *)movie;

但我不知道如何編寫這種方法。 需要一些幫助。

方法基於fmdb.m示例的實現

- (NSData *)getCoverForMovie:(Movie *)movie
{
    NSData *cover = nil;

    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];

    [db open];
    FMResultSet *results = [db executeQueryWithFormat:@"SELECT * FROM COVERS WHERE movie = %i", movie.movieID];

    if([results next])
    {
        cover = [results dataForColumn:@"cover"];
    }

    return cover;
}


- (BOOL)saveCover:(NSData *)cover ForMovie:(Movie *)movie
{
    BOOL result;

    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];

    [db open];

    result = [db executeUpdate:@"INSERT OR REPLACE INTO COVERS (movie, cover) VALUES (?,?)", movie.movieID, cover];

    return result;
}

感謝@ccgus的回答。

查看FMDB發行版中的main.m-它顯示了如何保存和拉出二進制blob(以safari圖標為例)“。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM