将图像存储并检索到iPhone的sqlite数据库中 [英] store and retrieve image into sqlite database for iphone

查看:67
本文介绍了将图像存储并检索到iPhone的sqlite数据库中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从sqlite数据库中存储和检索图像和文本。我的saveDatabase编码工作正常。.但我不知道是否将其保存在数据库中。这是我的代码。

I m trying to store and retrieve image and text from sqlite database..My saveDatabase coding is working correct..but i dont whether it is saved in my database..Here is my code for that..

    sqlite3 *database;
    dbName=@"dataTable.sqlite";
    NSArray *documentpath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentdir=[documentpath objectAtIndex:0];
    dbPath=[documentdir stringByAppendingPathComponent:dbName];
    sqlite3_stmt *compiledStmt;
   if(sqlite3_open([dbPath UTF8String], &database)==SQLITE_OK){
        NSLog(@"Name:%@,Company:%@,URL:%@",model.personName,model.companyName,model.imgurl);
//        NSString *sqlStatement=[NSString stringWithFormat:@"insert or ignore into Persons(PersonName,CompanyName,ImgUrl)values(\"%@\",\"%@\",\"%@\")",model.personName,model.companyName,model.imgurl];
//           const char *insertSQL=[sqlStatement UTF8String];

       const char *insertSQL="insert or ignore into Persons(PersonName,CompanyName,ImgUrl,UserImage)values(?,?,?,?)";
       sqlite3_bind_text(compiledStmt,1,[model.personName UTF8String],-1,SQLITE_TRANSIENT);
       sqlite3_bind_text(compiledStmt,2,[model.companyName UTF8String],-1,SQLITE_TRANSIENT);
       sqlite3_bind_text(compiledStmt,3,[model.imgurl UTF8String],-1,SQLITE_TRANSIENT);
       NSData *imageData=UIImagePNGRepresentation(imageView.image);
       sqlite3_bind_blob(compiledStmt, 4, [imageData bytes], [imageData length], NULL);
    if(sqlite3_prepare_v2(database,insertSQL, -1, &compiledStmt, NULL)==SQLITE_OK){
        sqlite3_step(compiledStmt);

//    char *errMsg;
//        sqlite3_exec(database, insertSQL, NULL,compiledStmt,&errMsg);
        NSLog(@"Add to Favourites");

当我试图检索我的数据库时出现错误。

When i m trying to retrieve my database i m getting error..

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString'

这是我读取数据库的代码。

This is my code for reading database..

    sqlite3 *database;

    favArray=[[NSMutableArray alloc]init];
    if(sqlite3_open([dbPath UTF8String],&database)==SQLITE_OK)
    {
        const char *sqlStatement="select * from Persons";
        sqlite3_stmt *compiledStatement;

        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL)==SQLITE_OK)
        {
            while (sqlite3_step(compiledStatement)==SQLITE_ROW) 
            {
                int personId = sqlite3_column_int(compiledStatement,0);

                NSString *personName=[NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 1)];

                NSString *companyName=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

                NSString *imgurl=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
                int length = sqlite3_column_bytes(compiledStatement, 4);
//                NSData *data       = [NSData dataWithBytes:sqlite3_column_blob(compiledStatement, 4) length:length];
                NSString *imageString=[NSString stringWithCharacters:sqlite3_column_blob(compiledStatement, 4) length:length];
                UIImage *personImage=[UIImage imageNamed:imageString];

                Favourites *favourites=[[Favourites alloc]initWithPersonId:personId personName:personName companyName:companyName imgurl:imgurl personImage:personImage];
                [favArray addObject:favourites];
            }
        }sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);

我认为即时通讯在通过错误的数据访问方式读取数据库时做错了什么。任何人都可以帮助我从数据库中获取图像...

I think i m doing something wrong in reading database by wrong way of accessing data.. anyone help me to get an image from database...

推荐答案

最后,我发现哪个地方有问题...首先我检查了数据存储在我的模拟器数据库中。没有存储。所以我发现我的插入编码中有问题...这是我在prepare语句之前绑定了数据...我找到的答案是..

Finally i found which place i m having a problem...First i checked the data is stored in my simlator database..its not stored.so i found there was a problem in my insert coding...it is that I m binding data before the prepare statement...The answer i found out is..

if(sqlite3_prepare_v2(database,insertSQL, -1, &compiledStmt, NULL)==SQLITE_OK){

sqlite3_bind_text(compiledStmt,1,[model.personName UTF8String],-1,SQLITE_TRANSIENT);
       sqlite3_bind_text(compiledStmt,2,[model.companyName UTF8String],-1,SQLITE_TRANSIENT);
       sqlite3_bind_text(compiledStmt,3,[model.imgurl UTF8String],-1,SQLITE_TRANSIENT);
       NSData *imageData=UIImagePNGRepresentation(imageView.image);
       sqlite3_bind_blob(compiledStmt, 4, [imageData bytes], [imageData length], NULL);

sqlite3_step(compiledStmt);

//    char *errMsg;
//        sqlite3_exec(database, insertSQL, NULL,compiledStmt,&errMsg);
        NSLog(@"Add to Favourites");
}

这篇关于将图像存储并检索到iPhone的sqlite数据库中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆