Originariamente inviato da Buzzz
Ora avrei bisogno, appena prima dell'
inserimento di una nuova pizza, di sapere l'ultimo codice inserito nella tabella, in modo da incrementarlo di +1.
ESEMPIO:
01001 Margherita 5€
.
.
.
.01034 Prosciutto 8€
01035 4Formaggi 8.5€
Per inserire correttamente nella tabella il Codice dell'ultima pizza, devo sapere l'ultimo Codice inserito.. per "sapere" questo codice, esiste una Query specifica?
La query per sapere il codice è banale SELECT MAX(CODICE) FROM TABELLA....
Però non è cosi banale eseguirla in quanto devi tener conto della concorrenza cioè cosa succede se subito dopo che viene eseguita questa query un'altro client inserisce una nuova riga ? Semplice il nuovo codice che andrai a inserire sarà duplicato....
Per risolvere questo problema uno dei modi è quello di "lockare" la tabella in modo che nessun altro client ci possa scrivere prima di te :
codice:
Statement stmt = null;
try {
stmt = connection.createStatement();
stmt.execute("LOCK TABLES mytablename WRITE");
//ESEGUO LA QUERY PER SAPERE IL NUOVO CODICE
//ESEGUO LA QUERY DI INSERIMENTO
} catch (SQLException ex) {
System.out.println("SQL Exception caught + ex.getMessage() ");
throw new SQLException(ex.getMessage(), ex.getSQLState());
} finally {
if (stmt != null) {
//IMPORTANTISSIMO RIMUOVO IL LOCK DALLA TABELLA
stmt.execute("UNLOCK TABLES");
stmt.close();
}
}
--
Piccolo dubbio: Ovviamente posso ordinare la visualizzazione di una tabella per codice utilizzando
"SELECT * FROM prodotti ORDER BY Codice";
ma esiste un metodo anche per l'inserimento ordinato in tabella, o sarebbe inutile utilizzarlo?
Grazie ancora!
Che senso avrebbe farlo ? perchè vuoi buttar via tutti gli algoritmi di ottimizzazione di un database ?