Mysql
 sql >> Database >  >> RDS >> Mysql

Java e SQL:restituiscono null o generano eccezioni?

Eviterei quanto segue

   sql.append("SELECT * FROM ").append("dogs_table");
   sql.append(" WHERE ").append(colName).append("='");
                        sql.append(colValue).append("'");

e invece usa un PreparedStatement con i metodi di impostazione dei parametri associati (setString() ) ecc. Ciò eviterà problemi con i valori per colValue con virgolette e attacchi SQL injection (o più in generale, colValue formando una sintassi SQL).

mai restituire un null se la raccolta era semplicemente vuota. Sembra molto controintuitivo e del tutto inaspettato dal punto di vista del cliente.

Non consiglierei di restituire un null in condizioni di errore, poiché il tuo client deve verificarlo esplicitamente (e probabilmente lo dimenticherà). Se necessario, restituirei una raccolta vuota (questo potrebbe essere analogo al tuo commento relativo a un oggetto nullo) o più probabilmente genererebbe un'eccezione (a seconda delle circostanze e della gravità). L'eccezione è utile in quanto conterrà alcune informazioni relative all'errore riscontrato. Null non ti dice nulla.

Cosa dovresti fare se incontri un problema mentre costruisci un Dog oggetto? Penso che dipenda da quanto vuoi che sia robusta e resiliente la tua applicazione. È un problema restituire un sottoinsieme di Dog s, o sarebbe completamente catastrofico e devi segnalarlo? Questo è un requisito dell'applicazione (in passato ho dovuto soddisfare entrambi gli scenari - best-effort o tutto o niente ).

Un paio di osservazioni. Userei HashMap piuttosto che la vecchia Hashtable (sincronizzato per tutti gli accessi e, soprattutto, non una vera e propria Collection - se hai una Collection puoi passarlo a qualsiasi altro metodo aspettandoti qualsiasi Collection ), e StringBuilder su StringBuffer per ragioni simili. Non è un grosso problema, ma vale la pena conoscerlo.