0

文件数据.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

您已将查询的CFUinWHERE子句硬编码为“6”。

几个建议:

  1. 不要在查询中嵌入参数值。缺少正确的转义会导致某些值出现奇怪的错误,并允许 SQL 注入攻击。改用sqlite3_bind_*函数。

  2. 不要直接使用 sqlite,除非你真的知道你为什么要这样做。CoreData 更适合 99% 的典型应用程序。

于 2013-01-20T11:36:17.010 回答