问题描述
我想将图像数据保存到我的 sqlite 数据库,但我做不到......
I want to save image data to my sqlite database but I can't do it ...
- (void) SaveData: (Article*) article :(NSMutableArray*) rssList
{
sqlite3_stmt *statement;
if (sqlite3_open([self.dataBasePath UTF8String], &articlesDB) == SQLITE_OK)
{
NSString* sqlFormat = @"INSERT INTO ARTICLES (guid, title, summary, mainLink, pubDate, author, imageLink, body, favorites, smallImage) VALUES ('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', ?)";
// Correct summary.
NSString* summary = [NSString stringWithString:article.summary];
summary = [summary stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
// Correct title
NSString* title = [NSString stringWithString:article.title];
title = [title stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
// Correct Body
NSString* body = [NSString stringWithString:article.body];
//body = [body stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
// Create Insert SQL query.
NSString* insertSQL = [NSString stringWithFormat:sqlFormat, article.guid, title, summary, article.mainLink, article.pubDate, article.author, article.imageLink, body, article.favorite ? @"YES" : @"NO"];
// Add to database.
sqlite3_prepare_v2(articlesDB, [insertSQL UTF8String], -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
// Add to list.
[rssList addObject:article];
// Write Log.
NSLog( @"Article added ... " );
}
else
{
NSLog( @"Failed to add article. Error is: %s", sqlite3_errmsg(articlesDB) );
}
sqlite3_finalize(statement);
sqlite3_close(articlesDB);
}
}
你可以看到我有查询,最后我有 smallimage 和 value (?)
You can see that i have query and at the end i have smallimage and value (?)
@"INSERT INTO ARTICLES (guid, title, summary, mainLink, pubDate, author, imageLink, body, favorites, smallImage) VALUES ('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@', ?)";
我有一个必须更新程序中某处的图像值的函数:在这个函数中,当我尝试将数据写入最后一列SMALLIMAGE"但没有结果时,我选择了带有图像链接 url 的行......当我用编辑器打开我的数据库文件,我在最后一行看到只有NULL",就像我的数据没有保存一样......
I have a function that must update image value somewhere in my program: In this function i select the row with image link url when i try to write a data to the last column "SMALLIMAGE" but no result ... When I open my database file with editor i see in the last row only "NULL" like my data is not saved ...
- (void) SaveSmallImage: (NSData*) imgData :(NSString*) mainUrl
{
if (sqlite3_open([self.dataBasePath UTF8String], &articlesDB) == SQLITE_OK)
{
NSString* sqliteQuery = [NSString stringWithFormat:@"SELECT * FROM ARTICLES WHERE IMAGELINK = '%@'", mainUrl];
sqlite3_stmt* statement;
if( sqlite3_prepare_v2(articlesDB, [sqliteQuery UTF8String], -1, &statement, NULL) == SQLITE_OK )
{
sqlite3_bind_blob(statement, 9, [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);
sqlite3_close(articlesDB);
}
else
{
NSLog(@"SaveSmallImage: Failed from sqlite3_open. Error is: %s", sqlite3_errmsg(articlesDB) );
}
}
谁能告诉我我做错了什么...
Who can tell me what I do wrong ...
推荐答案
以下是保存图片到 SQLITE 的方法:
// Create Images Table.
sql_stmp = "CREATE TABLE IF NOT EXISTS IMAGES (URL TEXT UNIQUE, IMAGE BLOB)";
if( sqlite3_exec(articlesDB, sql_stmp, NULL, NULL, &errMsg) != SQLITE_OK )
NSLog( @"Fail to create "IMAGES" table. Error is: %@", errMsg );
这是保存功能:
// Save Small Image Data by given main url
- (void) SaveImagesToSql: (NSData*) imgData :(NSString*) mainUrl
{
NSLog( @"
*****Save image to SQLite*****
" );
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);
}
这是加载图像的功能:
// 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;
}
这篇关于将图像数据保存到 iphone 中的 sqlite 数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!