feed twitter facebook LinkedIn facebook

Java » Conectarnos a una base de datos con JDBC

agosto 10, 2007 por Víctor Cuervo 15 Comentarios Imprimir Imprimir

El objetivo de nuestro ejemplo es el de ver qué tenemos que hacer para crear una conexión JDBC con Java sobre una base de datos y ejecutar una consulta.

Las tres clases que manejaremos en nuestro ejemplo serán Connection para realizar la conexión a la base de datos, PreparedStatement que será la que contenga la sentencia SQL y ResultSet que será la que contenga el resultado.

Lo primero que tenemos que saber para realizar la conexión a la base de datos es donde se encuentra dicha base de datos. Para hacer referencia a la base de datos lo podemos hacer directamente mediante la IP o, por ejemplo, mediante una referencia ODBC.

Así, podríamos tener referencias como:

jdbc:db2:10.0.1.10:50000/BD1 (referencia directa)
jdbc:odbc:BD1 (referencia por ODBC)

Una vez conocemos la localización de nuestra base de datos debemos de saber el nombre de la clase que tiene implementada la conexión a la base de datos. Es lo que llamamos driver. Dependiendo de la forma en la que este implementado el driver, este, recibirá el apelativo de driver tipo1, tipo2, tipo3 o tipo4.

Si nos ponemos a escribir código, lo primero que debemos de hacer es instanciar la clase del driver.

Class.forName(sDriver).newInstance();

Dicha clase será la que nos proporcione una conexión a la base de datos, y como bien hemos dicho, la conexión la guardaremos en una instancia de la clase Connection.

con = DriverManager.getConnection(sURL);

Un vez que hemos conseguido una conexión a la base de datos lo siguiente será el preparar una sentencia SQL en un PreparedStatement. No haremos nada complicado con el SQL, algo así como...

stmt = con.prepareStatement("SELECT titulo FROM libros");

Construida nuestra sentencia, realizamos la ejecución de la misma. Y el resultado al ResultSet.

rs = stmt.executeQuery();

Un ResultSet no deja de ser una especie de matriz (filas x columnas) que deberemos de recorrer mediante el movimiento de un cursor. Y la forma más fácil en Java es mediante un bucle while. Y para acceder a las columnas bastará con utilizar los métodos getXXX del ResultSet: getString() para las cadenas de texto, getDouble() para los decimales, getDate() para las fechas,......

while (rs.next())
   System.out.println (rs.getString("titulo"));

Una vez que hemos finalizado el cometido de nuestro ejercicio deberemos de cerrar las conexiones a la base de datos. Para ello invocaremos el método close() sobre los tres objetos mencionados.

Y en todo este proceso, las excepciones. No nos debemos de olvidar de ellas. A tal respecto deberemos de ejecutar nuestro código en un bloque try-catch que controle la SQLException. Excepción común que se produce en el acceso a la base de datos.

El código podría quedar como el que sigue:

try {
  Class.forName(sDriver).newInstance();    
  con = DriverManager.getConnection(sURL);

  try {

    // La Query
    stmt = con.prepareStatement("SELECT titulo FROM libros");
    rs = stmt.executeQuery();
	   
    // Recorremos el resultado
    while (rs.next())
      System.out.println (rs.getString("titulo"));

    } catch (SQLException sqle) { 
      System.out.println("Error en la ejecución:" 
            + sqle.getErrorCode() + " " + sqle.getMessage());    
}

Visualizar el ejemplo | Descargar el código

tags: , , , , , , , , , , , , , , , , ,

Artículos relacionados:

15 comentarios »

RSS feed para los comentarios de esta entrada. TrackBack URI

1 2
  1. natalia
    octubre 12, 2007 #

    estoy haciendo un proyecto con eclipse y maysql y necesito saber como hago la conexion de la base de datos con eclipse

  2. claudia
    noviembre 8, 2007 #

    hola

  3. MILTON CASAS
    diciembre 7, 2007 #

    EXCELENTE APORTE, MUY AGRADECIDO

  4. carlos
    enero 11, 2008 #

    necesito manipular una base de datos q ya esta enlazada conjava

  5. efra
    junio 25, 2008 #

    Hola a todos. Tnego una curiocidad, para que me muestros todos los campos. que debeo hacer.Porque en sql server se hacer slect * from clientes. en java es igual.

  6. Anthony
    julio 28, 2008 #

    Estoy trabajando con eclipse y mySQL
    Por favor si sabe como hacer la conexion le pido responda este mensaje

  7. silver_7
    octubre 2, 2008 #

    amm… Hola!
    Tengo que hacer una conexion remota para hacer una consulta… ahora mismo pruebo el codigo antes descrito aqui. solo que aun no me queda muy claro y pues no tengo donde probarlo. anteriormente en clase hice la prueba con el siguiente codigo en Java, desde el servidor y el cliente. El Server contiene el texto, y el Cliente recibe el texto. Ahora quiero hacer lo mismo pero con una consulta.
    Me podria alguien explicar mas detalladamente? con el codigo que se explica aqui puedo modificar mi codigo para aplicar la conexion y consulta?

    Server

    import java.net.*;
    import java.io.*;
    public class Servidor{
    public static void main(String [] args){
    ServerSocket ss = null;
    try{
    ss = new ServerSocket(5432);
    }
    catch(IOException e1){
    System.out.println(e1.toString());
    }
    try{
    Socket s = ss.accept();
    OutputStream os = s.getOutputStream();
    DataOutputStream dos = new DataOutputStream(os);
    dos.writeUTF(“Hola, soy yo!”);
    s.close();
    os.close();
    }
    catch(IOException ioe){}
    }
    }

    Cliente

    import java.net.*;
    import java.io.*;
    public class Cliente{
    public static void main(String [] args){
    try{
    Socket s1 = new Socket(“192.168.0.89″, 5432);
    InputStream is = s1.getInputStream();
    DataInputStream dis = new DataInputStream(is);
    System.out.println(dis.readUTF());
    is.close();
    dis.close();
    }
    catch(ConnectException ce){
    }
    catch(IOException ioe){}
    }
    }

  8. Alejandro
    junio 11, 2010 #

    Tengo una duda al respecto de recorrer un resultset.
    Está claro que utilizando .next() vamos pasando por cada uno de los registros, pero qué pasa cuando el resulset tiene sólo un registro????

    En mi caso, la sentencia rs.next() da true y por tanto entra al bucle, pero cuando va a acceder al contenido da un error porque ya se saltó el registro.

    Copio el código que he tenido que utilizar para contemplar ese caso:

    boolean existe = rs.first();
    if (existe) { //con esto obtengo los datos del primer registro
    valor = rs.getString(“VAL”);
    //líneas de código para trabajar con valor
    while (rs.next()) { //ahora que ya tengo el primero sigo cogiendo los demás registros, si los hay
    valor = rs.getString(“VAL”);
    //líneas de código para trabajar con valor
    }
    }

    **********************************

    Como podéis intuir, las líneas de código para trabajar con valor son las mimas (tengo que repetir el código). Si no hago el rs.first() sino que directamente hago el rs.next() no puedo captar el valor del primer registro, si sólo tengo uno en el resultset.

    Espero haberme expresado con claridad.

    Saludos,

  9. mar
    noviembre 3, 2010 #

    hola kiero saber como conectar de eclipce asi una base de datos

  10. dario espindola
    abril 22, 2011 #

    hola… alguien me puede ayudar a halar los datos desde access para mostrarlo en la interfaz de java necesito que ingrese,consulte,modifique, elimine y haga un listado de una tabla que contiene cedula, nombres, apellidos, direccion y telefono….. gracias

1 2

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*