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 ?