当前位置:编程学习 > wap >>

新手 sqlite3 存储图片的问题

小弟在做数据库存图片,网上搜了一下,但是没有达到目的。
贴代码;

- (NSString *) databasePath
{
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSLog(@"path:%@",path);
    return [path stringByAppendingPathComponent:@"test.sql"];
}




- (void) viewDidLoad {
    [super viewDidLoad];
    
    NSString *name = [self databasePath];
    if (sqlite3_open([name UTF8String], &dataBase) != SQLITE_OK) {
        NSLog(@"sql open error");
    }
    NSLog(@"sql create ok");
    
    char *err;
    NSString *createTableSQL = @"create table if not exists LOVE(image_ID integer primary key,url text,image BLOB)";
    if (sqlite3_exec(dataBase, [createTableSQL UTF8String], NULL, NULL, &err) != SQLITE_OK) {
        sqlite3_close(dataBase);
        NSLog(@"create table error");
    }
    
    //cha
    NSURL *url = [NSURL URLWithString:@"http://sh.centanet.com/ctPostImage/B4/51/C4AF8E4741D8A19DA1F081AB3BA1-9.jpg"];
    NSString *urlString = [NSString stringWithFormat:@"%@",url];
    NSData *imageData = [NSData dataWithContentsOfURL:url];
    NSUInteger length = [imageData length];
    
    sqlite3_stmt *statement;
    NSString *query = [[NSString alloc] initWithString:[NSString stringWithFormat:
                                                        @"insert into LOVE(url,image),values(?,?)"]];
    
    if (sqlite3_prepare_v2(dataBase, [query UTF8String], -1, &statement, NULL) != SQLITE_OK) {
        NSLog(@"insert prepare error:");
        return;
    }
    sqlite3_bind_text(statement, 1, [urlString UTF8String], strlen(urlString), SQLITE_TRANSIENT);
    sqlite3_bind_blob(statement, 2, [imageData bytes], length, SQLITE_TRANSIENT);
    
    sqlite3_step(statement);
    
    
    //qu
    NSString *selectSQL = @"select image from love";
    if (sqlite3_prepare_v2(dataBase, [selectSQL UTF8String], -1, &statement, &err) == SQLITE_OK) {
        NSLog(@"select sql pass");
        while (sqlite3_step(statement)==SQLITE_ROW) {
            NSData *imagDeata;
            const void *test = sqlite3_column_blob(statement, 0);
            int size = sqlite3_column_bytes(statement, 0); 
            imagDeata =[NSData dataWithBytes:test length:size];
            UIImage *image1 = [UIImage imageWithData:imageData];
            UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
            imageView.image = image1;
            [self.view addSubview:imageView];
            [imageView release];
        };
    }
    sqlite3_finalize(statement);
    sqlite3_close(dataBase);
}


运行之后报错:insert prepare error

希望大虾能帮帮小弟 --------------------编程问答-------------------- 图片存在数据库里面吗?
多占IO啊?移动设备更要效率!

把URL保存在数据库,然后理顺管理逻辑就可以了。
非要那么办,你到官方找方案吧,毕竟开源的,还是C写的。 --------------------编程问答--------------------
引用 1 楼 ybh37 的回复:
图片存在数据库里面吗?
多占IO啊?移动设备更要效率!

把URL保存在数据库,然后理顺管理逻辑就可以了。
非要那么办,你到官方找方案吧,毕竟开源的,还是C写的。


是这样的。一般都是把接收到的图片的 string   保存下来,再通过访问服务器来获取图片

--------------------编程问答-------------------- 存在沙盒里,图片地址存数据库就好。 --------------------编程问答-------------------- 谢谢各位,我是要将在访问过程中的图片保存到本地,下次加载就不用浪费下载图片的速度了,最后还是选择保存在文件里面,
补充:移动开发 ,  iPhone
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,