La query per sapere il codice è banale SELECT MAX(CODICE) FROM TABELLA....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?
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(); } }
Che senso avrebbe farlo ? perchè vuoi buttar via tutti gli algoritmi di ottimizzazione di un database ?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!![]()

Rispondi quotando