سؤال

وأستخدمه SQLite3 للتنمية فون وأنا محاولة للالتفاف عدد قليل من البيانات إدراج في معاملة. حاليا لدي رمز أدناه الذي يعمل بشكل صحيح ولكن بعد قراءة سؤال آخر على SO أدركت أنه سيكون من الأفضل أن يكون هؤلاء في صفقة واحدة بدلا من واحدة لكل منهما. لم استطع العثور على الدعوة API C لبدء وارتكاب المعاملة. بعض التعليمات البرمجية في الهدف-C لكنني لا أعتقد أن هذا relevent عن الحقيقة لهذه المسألة.

- (void)saveAnimals {
    //Insert all the animals into the zoo database
    int i;

    const char *sql = "insert into Animal(Zoo_ID, Animal_Num, Animal_Text) Values(?, ?, ?)";
    for (i = 0; i < ([[self animalArray] count] - 1); i++) {

        if(addStmt == nil) {
            if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
                NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
        }
        int animalNum = [[[self animalArray] objectAtIndex:i] animal_Number];
        NSString *animalText = [[NSString alloc] initWithString:[[[self animalArray] objectAtIndex:i] animal_Text]];
        sqlite3_bind_int(addStmt, 1, zoo_ID);   
        sqlite3_bind_int(addStmt, 2, animalNum);    
        sqlite3_bind_text(addStmt, 3, [animalText UTF8String], -1, SQLITE_TRANSIENT);
        [animalText release];
        if(SQLITE_DONE != sqlite3_step(addStmt)) {
            NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
        }

        //Reset the add statement.
        sqlite3_reset(addStmt);     
    }
}

ما أعتقد يحتاج إلى أن يتم سيتولى الأمر sqlite3_prepare_v2 من أجل حلقة، تبدأ الصفقة، انتقل من خلال لحلقة، تنفيذ المعاملة. ومع ذلك، وأنا لست متأكدا ما يدعو الى "بدء المعاملة" و "تنفيذ المعاملة" هي. وأنا لا تزال تستخدم sqlite3_step؟ شكرا لمساعدتكم.

هل كانت مفيدة؟

المحلول

بدء المعاملة مع: sqlite3_exec(db, "BEGIN", 0, 0, 0);

والالتزام صفقة مع: sqlite3_exec(db, "COMMIT", 0, 0, 0);

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top