sql >> Base de Datos >  >> RDS >> Mysql

Java y SQL:¿devuelven un valor nulo o lanzan una excepción?

Evitaría lo siguiente

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

y en su lugar use un PreparedStatement con sus métodos de establecimiento de parámetros asociados (setString() ) etc. Esto evitará problemas con los valores de colValue tener comillas y ataques de inyección SQL (o más generalmente, colValue formando alguna sintaxis SQL).

Yo nunca devuelve un valor nulo si la colección simplemente estaba vacía. Eso parece muy contrario a la intuición y completamente inesperado desde el punto de vista del cliente.

No recomendaría devolver un valor nulo en condiciones de error, ya que su cliente tiene que verificar esto explícitamente (y probablemente lo olvide). Devolvería una colección vacía si fuera necesario (esto puede ser análogo a su comentario sobre un objeto nulo), o más probablemente lanzaría una excepción (dependiendo de las circunstancias y la gravedad). La excepción es útil porque llevará alguna información relacionada con el error encontrado. Null no te dice nada.

¿Qué debe hacer si encuentra un problema al construir un Dog? objeto ? Creo que eso depende de qué tan robusta y resistente quieras que sea tu aplicación. ¿Es un problema devolver un subconjunto de Dog? s, o sería completamente catastrófico y necesita informar esto? Ese es un requisito de la aplicación (tuve que atender cualquiera de los escenarios en el pasado:mejor esfuerzo o todo o nada ).

Un par de observaciones. Usaría HashMap en lugar de la antigua Hashtable (sincronizado para todos los accesos y, lo que es más importante, no es una Collection adecuada - si tienes una Collection puede pasarlo a cualquier otro método esperando any Collection ), y StringBuilder sobre StringBuffer por razones similares. No es un problema importante, pero vale la pena conocerlo.