Проблемы с FMDatabase iOS INSERT - PullRequest
0 голосов
/ 25 января 2012

Я делаю заявку с базой данных.Для модальных я использую классы FMDatabase.Теперь мне нужно вставить некоторые новые данные в две таблицы: -project (первичный ключ id_proj, autoince unique, name, baseImage) -imagesforpro (id_img, primkey autoincr unique, smallimage, largeimage, id_proj) У меня есть метод -(void)addProject:(Project*)proj, для которого я передаюОбъект проекта.Затем я должен вставить projectName и baseImage в таблицу проекта, а затем извлечь id_proj только что вставленной записи и вставить небольшие и большие изображения в таблицу imagesforpro. Как запомнить id_proj (который является автоинкрементом) для последней вставленной записи?Кроме того, как использовать INSERT?Я правильно его использую?как правильно поместить NSData в базу данных?Благодарю.Вот что у меня пока так:

-(void)addProject:(Project*)proj
{
    [db open];
    NSData *bmdata=UIImagePNGRepresentation(proj.baseImage);
    if (proj==nil) {
        NSLog(@"Dead Object");
    }
    NSLog(@" NEW name is %@", proj.projectName);
    //DOESN'T WORK
    //id_proj is autoincrement field that's why I just pass name and base image
   [db executeUpdate:@"INSERT INTO project VALUES (?,?)", [proj.projectName UTF8String], bmdata];
    //sqlite3_last_insert_rowid()
    [db close];
    sqlite3 *dataB;
    int status=sqlite3_open([[self dbPath] UTF8String], &dataB);
    if(status!=SQLITE_OK)
    {

        NSLog(@"Error");
        //exit(1);
    }
    //RETURNS 0(
    int lastindex=sqlite3_last_insert_rowid(dataB);
    NSLog(@"Last inserted index %i", lastindex);
    sqlite3_close(dataB);


    [db open];
    //Add images for the project (another table)
    for(int i=0; i<[proj.largeImages count]; i++)
    {
        UIImage *smallImg=[proj.smallImages objectAtIndex:i];
        UIImage *bigImg=[proj.largeImages objectAtIndex:i];
        NSData *sidata=UIImagePNGRepresentation(smallImg);
        NSData *bidata=UIImagePNGRepresentation(bigImg);
        // Here I have to insert an image and id of the project it refers too
        //How do I find out the last inserted id_proj?
        [db executeUpdate:@"INSERT INTO imagesforpro VALUES (?,?,?)", sidata, bidata, lastindex];
    }


     [db close];


}
...