Mysql
 sql >> Base de données >  >> RDS >> Mysql

Java et SQL :renvoie null ou lance une exception ?

J'éviterais ce qui suit

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

et utilisez à la place un PreparedStatement avec ses méthodes de paramétrage associées (setString() ) etc. Cela évitera les problèmes avec les valeurs de colValue avoir des guillemets et des attaques par injection SQL (ou plus généralement, colValue formant une syntaxe SQL).

Je ne le ferais jamais renvoie une valeur nulle si la collection était simplement vide. Cela semble très contre-intuitif et complètement inattendu du point de vue du client.

Je ne recommanderais pas de renvoyer un null dans les conditions d'erreur, car votre client doit explicitement vérifier cela (et l'oubliera probablement). Je renverrais une collection vide si nécessaire (cela peut être analogue à votre commentaire concernant un objet nul), ou plus probablement lancerait une exception (selon les circonstances et la gravité). L'exception est utile car elle contiendra des informations relatives à l'erreur rencontrée. Null ne vous dit rien.

Que faire si vous rencontrez un problème lors de la construction d'un Dog objet ? Je pense que cela dépend de la robustesse et de la résilience que vous souhaitez pour votre application. Est-ce un problème de renvoyer un sous-ensemble de Dog s, ou serait-ce complètement catastrophique et vous devez le signaler ? C'est une exigence d'application (j'ai dû répondre à l'un ou l'autre scénario dans le passé - meilleur effort ou tout ou rien ).

Quelques observations. J'utiliserais HashMap plutôt que l'ancien Hashtable (synchronisé pour tous les accès et, plus important encore, pas une Collection appropriée - si vous avez une Collection vous pouvez le passer à n'importe quelle autre méthode en attendant any Collection ), et StringBuilder sur StringBuffer pour des raisons similaires. Pas un problème majeur, mais bon à savoir.