Monday, June 21, 2010

Problemas con Jdbc para conectar a una BD en SqlServer 2005 Express (PROGRAMACION)

Crear aplicaciones de bases de datos en Java a través de Jdbc puede no ser siempre una experiencia alegre, sobre todo cuando se trata de conectarlas con SqlServer.

En nuestro caso trabajamos con el IDE Eclipse, usamos un driver de Microsoft y usamos SqlServer 2005 Express Edition.

Los primeros problemas vienen con el Driver que a decir de varias personas en Internet no es la mejor opción seleccionar el de Microsoft sino otros de terceros que incluso se pueden encontrar en CodeProjetc con licencia GNU.

En Microsoft encontramos varias versiones: “Microsoft SQL Server JDBC Driver 2.0” y “Microsoft SQL Server 2005 JDBC Driver” y aunque la lógica indica hacer uso de este ultimo pues en mi caso solo funcionó el primero.

Entonces, ya sabe, si tiene problemas con la supuesta versión 2005 del Driver pues utilice en su lugar la versión “Microsoft SQL Server JDBC Driver 2.0”.

Estructura de la Cadena de Conexión.

Lo primero es un curso de adivino, hasta que te convences y buscas la documentación. Normalmente en todas las cadenas de conexión el nombre del servidor es “NombreServidor\NombreInstancia” (recordemos que podemos tener varias instancias de SqlServer en la misma PC, incluso de la misma versión) pero no se por cual motivo nuestros amigos de Microsoft decidieron separar aquí estas dos propiedades: Supongo que de fondo sea por culpa de alguna limitación de Java, jajaja.

El formato es como sigue:

"jdbc:sqlserver://MOMBRE_SERVIDOR;instanceName=NOMBRE_INSTANCIA;user=USUARIO;password=PSW;databaseName=NOMBRE_BD";

Un ejemplo concreto sería:

"jdbc:sqlserver://miServidor;instanceName=SQLEXPRESS; user=sa;password=miPassword;databaseName=miDB";

Una vez que esto es correcto estaremos en condiciones de crear Conexiones en Java a través del java.sql.DriverManager: DriverManager.getConnection(connectionUrl);

A partir de este momento pueden generarse una serie de mensajes de error entre cuyas causas están las siguientes:

- No Suitable Driver.

Este es un error bastante común y que lo he visto bastante documentado salvo por el segundo punto que expondré.

Lo primero es verificar que incluimos la biblioteca del driver en el ClassPath del proyecto. En el caso de Eclipse basta con acceder a la propiedades del proyecto, opción “Java Build Path” en la lista de la izquierda, ficha Libraries, botón “Add External JARs…” y localizar el jar del driver correcto como explique anteriormente.

Pero esto me funciono en varias PC y de pronto en una no me funcionaba, error va y error viene y ni atrás ni adelante, hasta que verificando observe que estaba usando la versión 5 y necesite configurar el uso de la versión 6 del “JRE System Library (jre6)” .

En mi caso, usando Windows7, mas de un problema me vino por esta causa. Por ejemplo el programa iReport no se me abría, entre otros, por lo que le recomiendo descargar la ultima versión del JRE.

- El servicio SQLBrowser está detenido.

Hasta ahora jamás he tenido que iniciar este servicio (parte del SqlServer) para conectarme con SqlServer pero al parecer este Driver hace uso del mismo para detectar la instancia que solicitamos.

Esto lo podemos hacer desde varios lugares: el administrador de Servicios del PC, el “Sql Server Configuration Manager” localizado en el grupo de programas del menú Start de Windows con nombre “Microsoft Sql Server 2005/Configuration Tools”.

- El protocolo TPC/IP de Servidor para SQLEXPRESS está desabilitado.

Casi de seguro deberemos activar el uso de este protocolo pues por defecto no se activa con la instalación.

Desde el “Sql Server Configuration Manager” vaya al árbol de la izquierda a la opción
“SQL Server 2005 Network Configuration/Protocols for SQLEXPRESS” y en la derecha active el protocolo TCP/IP.

- No está activada la Autenticación mixta para Sql Server que nos permita autenticarnos con usuarios propios del mismo y no con los usuarios de Windows.

Desde el “Micorsoft SQL Server Management Studio” acceda al nombre de su Instancia en el árbol de la izquierda (una vez registrado y conectado claro), acceda a sus Propiedades (clic derecho encima y seleccione Properties), vaya a la ficha Security y active la opción “SQL Server and Windows Authentication mode” del grupo de opciones “Server authentication”.

- El usuario “sa”está desabilitado o posee una contraseña diferente a la que está utilizando.

Aunque no es correcto, en ambientes de producción solemos utilizar al mismísimo usuario “sa” (System Administrator) para trabajar pero por defecto la instalación deja la posibilidad de autenticarse a través de este usuario deshabilitada.

Para corregir este problema, desde el “Micorsoft SQL Server Management Studio” acceda al nombre de su Instancia en el árbol de la izquierda (una vez registrado y conectado claro), acceda a la opción Security/Login/sa, y una vez allí, a sus Propiedades (clic derecho encima y seleccione Properties). Vaya a la ficha Status y active la opción “Enabled” del grupo de opciones “Login”.

De paso vaya a la ficha General y verifique o modifique la contraseña para este usuario.

Bueno, son bastantes las causas de errores media mágicas a las que nos enfrentamos como pueden ver. Espero tengan suerte y no se enfrenten a ellas.