во время вставки - PullRequest
       14

во время вставки

0 голосов
/ 29 мая 2010

У меня проблема со вставкой данных в базу данных sqlite.

    char *update="INSERT OR REPLACE INTO ct_subject (id,id_parent, title, description, link, address, phone, pos_lat, pos_long, no_votes, avg_vote, photo, id_comerc, id_city, placement, type, timestamp, mail) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
        sqlite3_stmt *stmt;
        if(sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK){
            sqlite3_bind_int(stmt, 1, [[[newCategories objectAtIndex:i] valueForKey:@"id"] intValue]);
            sqlite3_bind_int(stmt, 2, [[[newCategories objectAtIndex:i] valueForKey:@"id_parent"] intValue]);
            sqlite3_bind_text(stmt, 3, [[[newCategories objectAtIndex:i] valueForKey:@"title"] UTF8String], -1, NULL);
            sqlite3_bind_text(stmt, 4, [[[newCategories objectAtIndex:i] valueForKey:@"description"] UTF8String], -1, NULL);
            sqlite3_bind_text(stmt, 5, [[[newCategories objectAtIndex:i] valueForKey:@"link"] UTF8String], -1, NULL);
            sqlite3_bind_text(stmt, 6, [[[newCategories objectAtIndex:i] valueForKey:@"address"] UTF8String], -1, NULL);
            sqlite3_bind_text(stmt, 7, [[[newCategories objectAtIndex:i] valueForKey:@"phone"] UTF8String], -1, NULL);
            sqlite3_bind_text(stmt, 8, [[[newCategories objectAtIndex:i] valueForKey:@"pos_lat"] UTF8String], -1, NULL);
            sqlite3_bind_text(stmt, 9, [[[newCategories objectAtIndex:i] valueForKey:@"pos_long"] UTF8String], -1, NULL);
            sqlite3_bind_int(stmt, 10, [[[newCategories objectAtIndex:i] valueForKey:@"no_votes"] intValue]);
            sqlite3_bind_text(stmt, 11, [[[newCategories objectAtIndex:i] valueForKey:@"avg_vote"] UTF8String], -1, NULL);
            if ([[[newCategories objectAtIndex:i] valueForKey:@"photo"] length]!=0) {
                NSMutableString *webUrl = (NSMutableString *)[[NSMutableString alloc] initWithString:@"http://www.crotune.com/public/images/subjects/"];
                [webUrl appendString:[[newCategories objectAtIndex:i] valueForKey:@"photo"]];
                UIImage *myImage =  [self getWebImage:webUrl]; 
                if(myImage != nil){
                    sqlite3_bind_blob(stmt, 12, [UIImagePNGRepresentation(myImage) bytes], [UIImagePNGRepresentation(myImage) length], NULL);
                }
                else {
                    sqlite3_bind_blob(stmt, 12, nil, -1, NULL);
                }
                [webUrl release];
                [myImage release];
            }
            else {
                sqlite3_bind_blob(stmt, 12, nil, -1, NULL);
                    //NSLog(@" ne dodajem sliku2");
            }

            sqlite3_bind_int(stmt, 13, [[[newCategories objectAtIndex:i] valueForKey:@"id_comerc"] intValue]);
            sqlite3_bind_int(stmt, 14, [[[newCategories objectAtIndex:i] valueForKey:@"id_city"] intValue]);
            sqlite3_bind_int(stmt, 15, [[[newCategories objectAtIndex:i] valueForKey:@"placement"] intValue]);
            sqlite3_bind_int(stmt, 16, [[[newCategories objectAtIndex:i] valueForKey:@"type"] intValue]);
            sqlite3_bind_int(stmt, 17, [[[newCategories objectAtIndex:i] valueForKey:@"timestamp"] intValue]);
            sqlite3_bind_text(stmt, 18, [[[newCategories objectAtIndex:i] valueForKey:@"mail"] UTF8String], -1, NULL);
        }
        if (sqlite3_step(stmt) != SQLITE_DONE) {
            NSLog(@"%s", sqlite3_errmsg(database));
            NSAssert1(0,@"nemogu updateat table %s", errorMsg);
        }
        else {
                NSLog(@"Ubacio %d",i);
        }sqlite3_finalize(stmt);

Что происходит, так это то, что он начинает кушать память до тех пор, пока не завершит работу ... При предупреждении о памяти я снова закрываю и открываю базу данных, я установил размер кеша равным 50, как упомянуто в некоторых постах здесь, и попытался вставить запрос в оператор тот же результат .. он просто искажает память и приложение закрывается после 300 вставок на iphone или где-то около 900 вставок на iPad ... Любая помощь будет оценена ..

1 Ответ

1 голос
/ 30 мая 2010

Ничего себе. Код SQLite очень уродлив по сравнению с CoreData. Но, эй, каждому свое ...

Используйте инструмент Allocations, чтобы выяснить, что потребляет всю память. UIImage *myImage = [self getWebImage:webUrl]; Возможно ли чрезмерное сохранение данных изображения из-под контроля и без просмотра кода?

Кроме того, трудно догадаться, что может происходить, не видя ни большего количества кода, ни дополнительных доказательств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...