Acceso a Base de datos de SQL Server desde java (Jconnector)

Ejemplo muy sencillo de acceso a Base de datos de SQL Server desde java usando un JConnector. En este ejemplo voi a mostrar como se realiza una conexion desde un programa java a una BD de SQL Server. El software que he usado para este ejemplo es:
S.O.: Windows 7
DBMS: SQL Server 2005 Express
jconnector: jtds-1.2.5.jar, descargar.

Como se puede ver voi a usar JTDS ya que el jconnector oficial de microsoft realmente nunca supe usarlo correctamente ademas de que da muchos problemas tanto usarlo como en cuanto a rendimiento. jtds es un jconnector libre para conectar a una BD de SQL server con Java. Es mucho mas sencillo de usar, tan es asi, que el uso es casi identico al jconnector de postgres o mysql. Pero si aun insistes en usar el jconnector de Microsoft aqui lo tienes para descargar (pregunta al oraculo como usarlo). En este ejemplo doy por hecho que ya tienes instalado y corriendo el servidor de SQL Server.

Los datos de conexion al servidor son:
Base de datos: prueba
Tabla: alumnos
Usuario: sa
Password: 12345
Nombre de instancia de SQL Server: SQLSERVEREXPRESS

El script para crear la tabla alumnos es:

create table alumnos(matricula int, nombre char(50), apellidos char(100), edad int, peso decimal(10,2),PRIMARY KEY(matricula) )

Y si tienes dudas sobre las instancias en SQL Server, aqui te dejo algo al respecto (preguntale a papa google si quieres saber mas):

  • En un servidor SQL Server pueden existir varias instancias.
  • Cada instancia es independiente de las demas.
  • Una instancia puede tener multiples BDs.
  • Debe haber una instancia predeterminada en el servidor.

Bueno continuemos, el ejemplo que aqui expongo se compone de 2 archivos, los cuales explico brevemente a continuacion:

Ejemplo1SQLServer.java
Esta clase crea una GUI (Interfaz Grafica de Usuario) muy sencilla; Un JFrame con un boton. En el codigo se explica lo mas importante…


// 		Instituto Tecnologico de Zacatepec
// Descripcion: Ejemplo de programa que accesa a una BD en SQL Server
// 			y realiza una operacion SELECT
// Author: 	Gonzalo Silverio 		gonzasilve@hotmail.com
// Archivo: Ejemplo1SQLServer.java

import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;

public class Ejemplo1SQLServer extends JFrame implements ActionListener
{
	//Guarda la consulta operacion a realizar
	String strConsultaSQL;
	//Apuntador a la conexion
	Connection conn = null;	
	//Para ejecutar operaciones SQL
	Statement estSQL1;
	//Para guardar los resultados de una operacion SELECT
	ResultSet rs;
	
	//Constructor
	Ejemplo1SQLServer(String titulo,int ancho,int alto)
	{
		super(titulo);
		this.setSize(ancho, alto);
		//centrar el JFrame
		setLocationRelativeTo(null);
		JButton btnConectar = new JButton("Conectar");
		btnConectar.addActionListener(this);	
		add(Box.createVerticalStrut(150));
		add(btnConectar);
		this.setLayout(new FlowLayout());
		//Para que al dar click en la x se cierre el JFrame
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);		
	}
	
	//Escuchandor
    public void actionPerformed(ActionEvent evento) 
    {
    	try
    	{
			if ( ConectarServidor() )
			{
	   		System.out.println(" Matr.\t\t\t Nombrev\t\t Apellidos\t\t\t Edad\t\t\t Peso");
				strConsultaSQL = "SELECT * FROM alumnos";
				rs = estSQL1.executeQuery(strConsultaSQL);

	   		// Iterar mientras haya un registro siguiente en el resultset
	   		// y mostrar los registros
	   		while (rs.next())
	   			System.out.println( String.valueOf( rs.getInt("matricula") ).trim()+"\t\t\t\t"+rs.getString("nombre").trim()+"\t\t\t\t"+rs.getString("apellidos").trim()+"\t\t\t"+String.valueOf(rs.getInt("edad")).trim()+"\t\t\t"+String.valueOf(rs.getDouble("peso")).trim()  );
	        	
	        	//Cerrar los objetos de manejo de BD
	        	CrearConexion.cerrar(rs);
	        	CrearConexion.cerrar(estSQL1);
	        	CrearConexion.cerrar(conn);	        	
			}		//Fin de if        
		}
		catch(Exception e) 
		{
	    	JOptionPane.showMessageDialog(null,"Error al ejecutar CONSULTA!!!!!!!!");
	    	//Mostrar la traza de la pila
	    	e.printStackTrace();
		}
    }

	//devuelve true en caso de que si se pudo conectar
	public boolean ConectarServidor() throws Exception
	{
	    try 
	    {		
	    		//Aqui se instancia a la otra clase --> CrearConexion.java	    		
	    		//y se le mandan en el constructor los datos de conexion
	     		CrearConexion con  = new CrearConexion("sa","12345","prueba");
	     		//Obtiene una referencia a la conexion abierta
	     		conn = con.getConnection();
	      	
	      	//Comprobar si hay una refencia valida
	      	if(conn!=null)
	      	{
					//Mostrar MSG al usuario de la conexion se ha establecido
					JOptionPane.showMessageDialog(null,"Conexion establecida");
	     			//Se prepara para ejecutar sentencias en la conexion recien abierta
	      		estSQL1 = conn.createStatement();
					return true;
	      	}
	      	else
	      		return false;
	      		
	  	 }
	    catch (SQLException e)
	    {
	    	
	      // the above drop statements will throw exceptions
	      // if the types and tables did not exist before. Just ingore it.
	      JOptionPane.showMessageDialog(null,"Error en la conexion!!!!!!!!");
	      e.printStackTrace();
	      return false;
	    }
	    		
	}

	//Punto de entrada del ejemplo
  	public static void main(String args[]) throws Exception 
  	{
		Ejemplo1SQLServer ejemplo = new Ejemplo1SQLServer("Ejemplo de conexion con SQL Server",400,300);  
	}
    
}

La ventana que se genera al ejecutar la clase anterior es la siguiente y como se puede observar al pulsar el boton se le a asociado un escuchador que conecta con la BD de SQL Server; y si todos los datos de conexion son correctos, se muestra un mensaje al usuario avisando que se ha establecido la conexion:

Interfaz grafica del ejemplo.

Interfaz grafica del ejemplo.

Ademas, se despliegan en la consola los datos de la tabla alumnos, como se muestra a continuacion.

Consola de JCreator mostrando los datos de la tabla alumnos.

Consola de JCreator mostrando los datos de la tabla alumnos.


Obviamente e insertado esos registros previamente (estoy usando JCreator para ejecutar el ejemplo y por eso la consola se ve asi). Como puedes ver; en realidad la conexion realmente se realiza en el otro archivo (CrearConexion.java), aqui solamente se indican los datos de conexion, este archivo es…

CrearConexion.java
Esta clase permite establecer una conexion al servidor SQL Server y ademas permite cerrar los diferentes objetos de manipulacion de BD (resultsets,statements y connection). He puesto las cosas de BD en esta clase solo por cuestion de estica (jajaj se ve mas fresa), y ademas asi separamos las cosas de BD en un archivo aparte; pero bien se pudo escribir este codigo en la otra clase anterior (Ejemplo1SQLServer.java). He escrito algunos comentarios sobre las cosas mas importantes en el codigo:

// 		Instituto Tecnologico de Zacatepec
 // Descripcion: Clase para manejo de base de datos de SQL Server
 // Author Gonzalo Silverio    gonzasilve@hotmail.com
 // Archivo: CrearConexion.java


import java.sql.*;

public class CrearConexion 
{
	//Datos por default de la conexion
	static String strUsuario = "sa";
	static String strPassword = "pw";
	static String strBaseDatos ="bd";
	static String strHost = "localhost";
	
	//Constructor, le llegan los datos con los que se conectara al DBMS
	public CrearConexion(String usr,String pw, String bd)
	{
		strUsuario = usr;
		strPassword = pw;
		strBaseDatos =bd;
		try
		{
			Class.forName("net.sourceforge.jtds.jdbc.Driver");		
		} catch ( ClassNotFoundException e )
		{
			System.out.println("ERROR: Error al cargar la clase del Driver");		
		}
	}
	
	//Constructor, le llegan los datos con los que se conectara al DBMS
	// a dif. del otro constructor le llega tbn el host (servidor)
	public CrearConexion(String usr,String pw, String bd,String srvr)
	{
		strUsuario = usr;
		strPassword = pw;
		strBaseDatos =bd;
		strHost = srvr;
		try
		{
			//Cargar el driver
			Class.forName("net.sourceforge.jtds.jdbc.Driver");		
		} catch ( ClassNotFoundException e )
		{
			System.out.println("ERROR: Error al cargar la clase del Driver\n");
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() throws SQLException 
	{
		//a continuacion vamos a formar la cadena de conexion, pero...
		//OJO aca debes poner el nombre de la instancia de SQL Server que vas a usar
		String url = "jdbc:jtds:sqlserver://"+strHost+"/"+strBaseDatos+";instance=SQLSERVEREXPRESS;";
		return DriverManager.getConnection(url,strUsuario,strPassword);
	}

	//Cierra objeto Resultset
	public static void cerrar(ResultSet rs)
	{	
		try
		{
			rs.close();
		} 
		catch(Exception ex)
		{}
	}
	
	//Cierra objeto Statement
	public static void cerrar(Statement st)
	{
		try
		{
			st.close();
		} 
		catch(Exception ex)
		{}
	}
	
	//Cierra objeto Connection
	public static void cerrar(Connection con)
	{	
		try
		{
			con.close();
		} 
		catch(Exception ex)
		{}
	}
}	//Fin de la clase

Bueno eso es todo y si tienes dudas o algo que decir de este ejemplo no olvides dejar tu comentario que gustosamente respondere si es necesario. Ho si quieres los fuentes solo deja tu e-mail y te los mando, hasta pronto y gracias x pasar por aqui ;).

Acerca de gonzasilve
Freelance Web Developer.

83 Responses to Acceso a Base de datos de SQL Server desde java (Jconnector)

  1. fernanda dice:

    Hola, estoy probando una aplicación que desarrollo, pero aun no logro conectar sql y java, me podrían ayudar. El error que tengo es el siguiente:
    Error de seguimiento en getConnection() : Error de inicio de sesión del usuario ‘xxxxxxxxx’. ClientConnectionId:e57d49b9-9a6d-43b2-9e2f-01143c48b792

  2. roxy dice:

    saludo necesito el codigo y libreria janetfalconette@gmail.com .gracias

  3. Pingback: try this site

  4. Nelson dice:

    Amigo POr favor su ayuda con el codigo

  5. Mario dice:

    ppppuuuutttooo

  6. Me podrías enviar el código por favor?????
    te lo agradecería por siempre!

  7. Oviedo dice:

    Como extraer los datos de una consulta con inner join desde java

  8. Anthony dice:

    Amigo por favor me podrías enviar el código, disculpas las molestias. y gracias de antemano

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: