1

谁能告诉我为什么我无法在 sqlite 中插入图像。有时我得到如下错误:1)(sqlite3_step(stm)== SQLITE_DONE),将值设为21。2)存储在数组中而不是数据库中。我是目标 c 的新手,所以如果你能发回代码,那就太好了,因为我几乎搜索了每个网站。谢谢!

    -(IBAction)submitDetails:(id)sender
    {
               sqlite3_stmt    *stm;
            const char *dbpath = [databasePath UTF8String];
            if (sqlite3_open(dbpath, &connectDB) == SQLITE_OK)
            {

                UIImage *contactImage = imageView.image;
                NSData *imageData = UIImageJPEGRepresentation(contactImage, 100);
                NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
                [defaults setObject:imageData forKey:@"image"];
                [defaults synchronize];
                NSLog(@"Data saved");             
                NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO STUDENTS (name,salary, gid,photo) VALUES (\"%@\", \"%@\", \"%@\",?)", name.text,salary.text,gid.text,imageData] ;

                const char *insert_stmt = [insertSQL UTF8String];
                sqlite3_prepare_v2(connectDB, insert_stmt, -1, &stm, NULL); 
                NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirec = [paths objectAtIndex:0];
    NSString *imgePath = [documentsDirec stringByAppendingPathComponent:@"note.sqlite"];

    if(sqlite3_open([imgePath UTF8String], &database) == SQLITE_OK){

        const char *sql = "insert into images (images) values (?)";
        if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) == SQLITE_OK){
            UIImage *edtedImae = [info objectForKey:UIImagePickerControllerOriginalImage];
            NSData *dataForImage = UIImagePNGRepresentation(edtedImae);
            sqlite3_bind_blob(addStmt, 1, [dataForImage bytes], [dataForImage length], SQLITE_TRANSIENT);
                NSLog(@"1st ..... %i",sqlite3_step(stm));
                NSLog(@" 2nd.... %i",SQLITE_DONE);
                if (sqlite3_step(stm) == SQLITE_DONE)
                {                   
                    NSString* aName=name.text;
                    NSString* aSalary=salary.text;
                    NSString* aGid=gid.text;

                   UIImage* aPhoto=[UIImage imageWithData:imageData];
                    Person *person = [[Person alloc] initWithName:aName salary:aSalary gid:aGid photo:aPhoto];  
               [rootObject.list addObject:person];
               [person release];                
                    status.text = @"Contact added";
                    NSLog(@"contact added %@  %@",name.text,gid.text);
                    NSLog(@"the count in person list is %i",[rootObject.list count]);
                    name.text = @"";
                    gid.text = @"";
                    salary.text = @"";

                } 
                else
                {
                    status.text = @"Failed to add contact";
                }
                sqlite3_finalize(stm);
                sqlite3_close(connectDB);      
            }


    }
4

1 回答 1

1

如果可以避免,请不要将图像保存在数据库中。相反,使用列来存储文件名和任何其他属性,然后将图像保存为文档。我使用 guid 方法来创建文件名。如果您应该删除 db 条目,请不要忘记删除文档。

于 2013-07-11T15:16:24.883 回答