PDA

Visualizza la versione completa : [C++] Mysql connector: setAutoCommit(0) non funziona


fbcyborg
22-12-2011, 19:41
Salve a tutti,

sto facendo delle prove per vedere se una update (o insert) viene resa effettiva quando non faccio esplicitamente il commit. Purtroppo, al contrario delle mie aspettative, quando chiudo la connessione con il database e non eseguo il commit, la query viene eseguita lo stesso e i nuovi dati resi persistenti sul database, anche se al momento della creazione della Connessione, setto esplicitamente l'autocommit a 0.

Non capisco perch questa cosa non sortisce alcun effetto.
Sono assolutamente sicuro di non fare commit da nessun'altra parte nel codice.

Ho creato una funzione che mi restituisce una connessione al database ed la seguente:


Connection *ConnectionManager::getConnection(){
Driver *driver;
Connection *con;

try {
driver = get_driver_instance();
con = driver -> connect(DBHOST, USER, PASSWORD);
con -> setAutoCommit(0); // <-------------------------
con -> setSchema(DATABASE);
} catch (SQLException &e) {
cout << "ERROR: SQLException in " << __FILE__;
cout << " (" << __func__<< ") on line " << __LINE__ << endl;
cout << "ERROR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << ")" << endl;

if (e.getErrorCode() == 1047) {
cout << "\nYour server does not seem to support Prepared Statements at all. ";
cout << "Perhaps MYSQL < 4.1?" << endl;
}

return NULL;
} catch (std::runtime_error &e) {

cout << "ERROR: runtime_error in " << __FILE__;
cout << " (" << __func__ << ") on line " << __LINE__ << endl;
cout << "ERROR: " << e.what() << endl;

return NULL;
}

return con;
}

C' per caso qualche bug nella libreria?

:dh:


EDIT: Risolto, scusate. Era un problema di motore di memorizzazione della tabella. Con MyISAM non funziona, e impostando InnoDB, ora funziona benissimo.

Loading