h1

Enum (I)

julio 23, 2010

Como han cambiado los tipos enumerados en Java.

Dado que este es un blog eminentemente práctico voy al tema:

- No puedo extender la clase: Efectivamente no tienes que utilizar Enum sino enum. Es un lío, sí. Lo que pasa es que internamente enum extiende Enum y ademas de manera “final” lo que significa que no lo puedes extender

- Veo que puedo declarar un constructor pero no puedo utilizarlo. Pues cierto es ello. De alguna manera la class enum es algo asi como estatica 100% asi que no puedes instanciar objetos. Te preguntaras entonces para que el constructor. Pues para añadir informacion al tipo. No solo los podemos enumerar, también podemos asociarlos y nos será muy útil

Cómo utilizar enum en Java:

1) Lo mas simple
public enum ErrorEnum {
ERROR_DESCONOCIDO, ERROR_DATOS_ENTRADA, ERROR_BASE_DATOS;
}
2) Pero podemos asociar un valor, por ejemplo un mensaje
public enum ErrorEnum {
ERROR_DESCONOCIDO(“Error desconocido”),
ERROR_DATOS_ENTRADA(“Datos de entrada erroneos”),
ERROR_BASE_DATOS(“La base de datos no esta disponible”);
private String mensaje;
ErrorEnum(String msg){
this.mensaje = msg;
}
public String getMensaje(){
return this.mensaje;
}
}
Cómo veis debemos hacer un constructor de tipo tal que le pasemos por parámetro el tipo que ponemos adjunto al Enum. Internamente, cuando construya el enum en tiempo de ejecución utilizará el constructor para crear una instancia de cada uno de los definidos, a los que tendremos acceso. Así mismo he creado un atributo o propiedad donde guardar internamente la constante y un getter para recuperarla.
h1

[SQL]Select tabla registros no estan en otra tabla

julio 21, 2010

Nunca hay una manera única de hacer las cosas y en el caso de las bases de datos,  lo mejor que podemos hacer es probar y analizar nuestras selects para optimizarlas.

De todas manera vamos con el tema del post:

Seleccionar registros de una tabla que no están en otra tabla:

Supongamos t1 = Tabla Origen, t2 = Tabla donde están los registros que no queremos. Trabajaremos con el campo id pero lo podéis substituir por la clave o claves de vuestras tablas

1) Select * from t1 where not exists (select 1 from t2 where t2.id = t1.id)

Si el campo/s id esta indexado esto va a ser muy rápido y sin problemas. Es posible que inicialmente hayais pensado en un NOT IN al estilo:

2) Select * from t1 where t1.id not in (select t2.id from t2)

Esta segunda opción es altamente ineficiente pues a cada registro se ejecuta la segunda select y la búsqueda en su resultado. Si t2 es grande lo vais a notar mucho.

Podríamos hacer un left join de manera que seleccionamos los que no ha podido hacer el join:

3) Select * from t1 left join t2 on t1.id=t2.id where t2.id is null;

Por algún motivo esta opcion se me antoja fea y prefiero la 1. Aún así puede ser muy ágil, por lo que vale la pena investigar la eficiencia de cada opción y escoger la que más nos complazca.

Hasta pronto!

h1

Objetivo

marzo 25, 2010

Empiezo con este un blog donde la intención es compartir una serie de conocimientos informáticos que he ido adquiriendo después de terminar la carrera y que me han sido necesarios para el desempeño de la profesión de programador informático.

Estarà principalmente enfocado al desarrollador en Java, sin olvidar algunos temas de sql, sistemas operativos y demás.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.