Java Home | My Blog | Cool Stuff | JavaHispano

Conexión a bases de datos con JDBC

3. Conexión a la base de datos con JDBC

El API JDBC incluye dos paquetes: java.sql y javax.sql los cuales contienes las clases necesarias para desarrollar aplicaciones en utilizando bases de datos en Java.

Si queremos importar el paquete JDBC hacemos lo siguiente:

import java.sql.*;

Las clases clave en JDBC se describen a continuación:

  • java.sql.DriverManager: Es la responsable de regresar una conexión a el driver apropiado. Esta clase contiene un metodo llamado getConnection( String url ) el cual intenta localizar el driver que le fue proporcionado mediante la url buscandolo en los drivers registrados.
  • java.sql.Driver: El objeto Driver el metodo acceptsURL( String url ) confirmando si se realizó la conexión con la url que el objeto DriverManager pasó.
  • java.sql.Connection: El objeto Connection provee la conexión entre el API JDBC y el sistema manejador de bases de datos con la url especificada. Una conexión especifica una sesión con el manejador de la base de datos.
  • java.sql.Statement: El objeto Statement actua como un contenedor para ejecutar sentencias SQL en una conexión dada.
  • java.sql.ResultSet: El objeto ResultSet controla el acceso de los resultados de una sentecia Statement dada en una estructura que puede ser manejada simplemente moviendo el cursor y desde el cual los datos pueden ser accesados usando una familia de metodos de obtención de datos.

Class.forName() y DriverManager

Para cargar el driver para la conexion se hace utilizando Class.forName(String nombreDriver ); en nuestro caso el nombre será "sun.jdbc.odbc.JdbcOdbcDriver" que es el nombre del driver para ODBC.

Para crear la conexion utilizamos la clase DriverManager y su metodo getConnection( String url ); donde la url esta formada por el nombre del API, el tipo de driver y el nombre de la base de datos, todos estos separados por dos puntos y dados como String, "jdbc:odbc:NombreBD".

Por lo tanto tenemos la conexión siguiente para nuestra base de datos:

   try
   {
        // Cargamos el driver
        Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); 

        // Conexion a la base de datos Empleados
        Connection conexion = DriverManager.getConnection( "jdbc:odbc:BDEmpleados" );            
   }
   catch( ClassNotFoundException cnfe )
   {
       System.err.println( "No se pudo cargar el driver..." );
       cnfe.printStackTrace();
   }
   catch( SQLException sqle )
   {
       System.err.println( "No se pudo hacer la conexión..." );
       sqle.printStackTrace();
   }

Statement y ResultSet

Un objeto Statement es usado para ejecutar una sentencia SQL estática y obtiene el resultado que produce. Statement define tres metodos para ejecutar sentencias SQL, las cuales manejan comandos SQL regresando diferentes tipos de resultados.

Metodos de Statement:

  • executeUpdate( String sqlStatement ): Ejecuta una sentencia INSERT, DELETE o UPDATE de SQL el cual puede regresar el numero de filas afectadas o simplemente no regresa nada.
  • executeQuery( String sqlStatement ): Ejecuta una sentencia SQL que regresa un simple ResultSet
  • execute( String sqlStatement ): Ejecuta una sentencia SQL que puede regresar multiples resultados.

Para crear una sentencia debemos de crearla a partir de la conexion:

Statement sentencia = conexion.createStatement();

Un objeto ResultSet son los datos que regresa una consulta SQL, estos datos consisten de todas las filas que satisfacen las condiciones de esa consulta y estas filas pueden ser accesibles a travez de metodos del ResultSet.

Para ir recorriendo el ResultSet nos valemos del metodo next() que nos devuelve true y posiciona el cursor hacia el siguiente campo de una fila, es decir, recorre campo por campo de una fila, cuando termina su recorrido comienza con otra fila si existe, si no su valor es false e indica que no hay más que recorrer, el recorrido se hace en el orden en el que estan los campos, ya que si intentamos leer un campo que no va marcará error de cursor.

Para obtener los datos del ResultSet se debe de hacer con los metodos según el tipo de dato,es decir si es un campo tipo Texto se debe de hacer con el metodo getString( String nombreCampo ), si es tipo numero se debe de hacer con getInt( String nombreCampo ), etc..., el nombre del campo debe de ser el nombre del campo de la tabla y no otro.

Obtener los datos de nuestra base de datos Empleados:

class ObtenerDatos
{

Connection conexion = null;
Statement sentencia = null;
ResultSet resultado = null;

public ObtenerDatos()
{ try { // Cargamos el driver Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); // Conexion a la base de datos Empleados Connection conexion = DriverManager.getConnection( "jdbc:odbc:BDEmpleados" ); // Creamos la sentencia
sentencia = conexion.createStatement();
} catch( ClassNotFoundException cnfe ) { System.err.println( "No se pudo cargar el driver..." ); cnfe.printStackTrace(); } catch( SQLException sqle ) { System.err.println( "No se pudo hacer la conexión..." ); sqle.printStackTrace(); } public void leerDatosBD()
{
try
{ // Creamos nuestro ResultSet a partir de los datos que nos regresa la ejecución de la sentencia
ResultSet rs = sentencia.executeQuery( "SELECT * FROM Empleado" );
// Mientras tenga datos que leer
while( rs.next() )
{ // Obtenemos ID que es de tipo entero
int id = rs.getInt( "ID" ); // Obtenemor Nombre que es de tipo String
String nombre = rs.getString( "Nombre" );
String apellidoPaterno = rs.getString( "ApellidoPaterno" );
String apellidoMaterno = rs.getString( "ApellidoMaterno" );
String direccion = rs.getString( "Direccion" );
int edad = rs.getInt( "Edad" );
String telefono = rs.getString( "Telefono" );
String salario = rs.getString( "Salario" );
// Imprimimos resultados obtenidos
System.out.println( id );
System.out.println( nombre );
System.out.println( apellidoPaterno );
System.out.println( apellidoMaterno );
System.out.println( direccion );
System.out.println( edad );
System.out.println( telefono );
System.out.println( salario );

System.out.println( "" );
}
}
catch( SQLException sqle )
{
System.out.println( "Error leyendo datos.."+sqle );
}
}

public static void main( String args[] )
{
ObtenerDatos od = new ObtenerDatos();
od.leerDatosBD();
}
} // Fin de la clase

La salida sería la siguiente:

1
Carlos
Hernandez
Perez
Av. Del Roble No. 193
25
2345432
6500.0000

2
Juan
Lopez
Rivera
Av. Cristobal Colon No. 1435
28
2136328
8300.0000

Paso 4, Ejecutar consultas INSERT, UPDATE y DELETE

e-mail: mgrappin arroba gmail punto com

Java Home | My Blog | Cool Stuff | JavaHispano

Hosted by www.Geocities.ws

1