Sale a tutti. Questo è il codice della mia funzione. Non riesco a capire come mai la query di UPDATE non venga eseguita realmente, anche se tutte le funzioni ritornano i messaggi corretti, come se l'operazione fosse andata a buon fine. Sembra che manchi qualcosa come COMMIT.
codice:int set_distance(struct sockaddr_in peeraddr, int distance) { sqlite3 *db; sqlite3_stmt *update_stmt; int rc; rc = sqlite3_open(DBname, &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 0; } static char *sql = "UPDATE peers SET distance = ? WHERE ip = '?' AND port = ?"; if(sqlite3_prepare(db,sql,-1,&update_stmt,NULL) != SQLITE_OK){ fprintf(stderr,"Errore durante la preparazione dello statement UPDATE. Error: %s\n", sqlite3_errmsg(db)); return 0; } //inserisco i vari campi sqlite3_bind_int(update_stmt, 1, distance); sqlite3_bind_text(update_stmt, 2, inet_ntoa(peeraddr.sin_addr), -1, SQLITE_TRANSIENT); sqlite3_bind_int(update_stmt, 3, ntohs(peeraddr.sin_port)); int success = sqlite3_step(update_stmt); if(success != SQLITE_DONE){ fprintf(stderr, "Errore durante l'update di 'peers'. Error: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 0; } success = sqlite3_finalize(update_stmt); printf("Peer updating succesful!\n"); sqlite3_close(db); //TODO check if peer already exists return 0; }

Rispondi quotando