0

ファイルData.m

-(void)update:(NSMutableDictionary *)materia {



  if (sqlite3_open([pathDB UTF8String], &database) == SQLITE_OK) {
        // query per l'inserimento di una nuova materia
        NSString *query = [NSString stringWithFormat:@"UPDATE libretto SET Nome='%@',Voto='%@',CFU='%@' WHERE CFU='6'",[materia objectForKey:@"Nome" ],[materia objectForKey:@"Voto"],[materia objectForKey:@"CFU"]];

        const char *sql = [query UTF8String];

        sqlite3_stmt *insert_statement;
        // eseguiamo la query
        if(sqlite3_prepare_v2(database, sql, -1, &insert_statement, NULL) == SQLITE_OK) {
            if(sqlite3_step(insert_statement) == SQLITE_DONE) {
                // ricarichiamo la lista
                [self caricaValori];
            }

        }
        // chiudiamo il db
        sqlite3_finalize(insert_statement);
    }
    sqlite3_close(database);

}

ファイルviewcontroller.m

file.mに追加しました

-(IBAction)update:(id)sender {



    _nome=[[Data alloc]init];

    _cell=[[MasterViewController alloc]init];



        if(_cell.indexpath2.row==0 ) {

     if([fieldNome.text isEqualToString:_nome.nome]){


    // creiamo un dizionario con i valori
    NSMutableDictionary *materia = [[NSMutableDictionary alloc] initWithObjectsAndKeys:fieldNome.text, @"Nome", fieldCFU.text, @"CFU",fieldVoto.text,@"Voto", nil];



    //inseriamolo nel db
    [dataList update:materia];


    // torniamo alla lista
    [self.navigationController popViewControllerAnimated:YES];


     }
    }




}

テーブルの最初のフィールドのみを更新するという問題。

テーブルに名前を追加すると、どのフィールドでもアップグレードしません

どうすれば修正できますか?

4

1 に答える 1

1

CFUクエリのinWHERE句を「6」にハードコーディングしました。

アドバイスのカップル:

  1. クエリにパラメータ値を埋め込まないでください。適切なエスケープがないと、一部の値に奇妙なバグが発生し、SQLインジェクション攻撃が可能になります。sqlite3_bind_*代わりに関数を使用してください。

  2. なぜこれを行っているのかを本当に理解していない限り、sqliteを直接使用しないでください。CoreDataは、一般的なアプリの99%に適しています。

于 2013-01-20T11:36:17.010 に答える