G.Bordel >Docencia >TAP Técnicas Actuales de Programación (curso 2010-2011)
desprotegido Intro. desprotegido Temario desprotegido Calendario desprotegido RPF desprotegido Recursos protegido Práctica protegido Gest. Alum.
tema_anterior Tema 14: Varios tema_siguiente
  1. Uso de métodos nativos en Java.
  2. Acceso a bases de datos en Java.[ejercicios]
  3. APIs de interés.

14.2- Acceso a bases de datos en Java

Vamos a ver aquí las ideas básicas para trabajar con bases de datos.

En primer lugar necesitamos disponer de la base de datos. El modo más general de acceder a una base de datos consiste en configurarla como un servicio en un determinado puerto (si reside en la misma máquina que la aplicación puede accederse tambien igualmente a través de "pipes").

De este modo lo primero que hemos de hacer es establecer la conexión desde nuestra aplicación con la base de datos, cosa que se hará a través de un driver específico para la base concreta que usemos. Si pensamos en MySQL, el driver lo encontramos en la libreria Connector/J (fichero mysql-connector-java-5.1.7-bin.jar a fecha de escritura de esta página. Con NetBeans lo encontraremos integrado y ha de incluirse entre las librerias del proyecto)

El driver se cargará mediante su nombre (no se instancia ningún objeto, por lo que el ClassLoader ha de "buscarlo" en las librerias disponibles. Nos servimos para ello del método "forName" de la clase "Class"). Una vez que se carga, queda a disposición del "DriverManager", a quién le podemos pedir la conexión mediante una especificación de la URL de la base de datos (como se ve a continuación) y del usuario y la clave de acceso.


try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/TAPDataBase","usuarioTAP", "claveTAP");
    //Continúa la aplicación

} catch(SQLException ex) {
        System.err.print("Problema de conexión con la base de datos: ");
        System.err.println(ex.getMessage());
}catch(ClassNotFoundException ex) {
        System.err.print("No se encuentra el driver JDBC: ");
        System.err.println(ex.getMessage());
}catch(InstantiationException ex) {
        System.err.print("No puede instanciarse el driver JDBC: ");
        System.err.println(ex.getMessage());
}catch(IllegalAccessException ex) {
        System.err.print("Intento de acceso ilegal al driver JDBC: ");
        System.err.println(ex.getMessage());
}

Una vez que disponemos de la conexión podemos ejecutar una Query (petición escrita en SQL) metida dentro de un Statement, y recoger el resultado que es un objeto ResultSet:

ResultSet rs = con.createStatement().executeQuery("select * from taplumnos");

El ResulSet contiene toda la información de la tabla formada por la base de datos en respuesta a nuestra consulta, y en concreto un objeto asociado de la clase ResultSetMetaData incluye metainformación de la misma (numero de campos en los registros (número de columnas de la tabla), nombre de las columnas, tipos de datos, etc)

A modo de ejemplo, podemos ver cómo se compondría un modelo de tabla para funcionar con una presentación swing JTable (una subclase de AbstractTableModel):


        TableModel tm = new AbstractTableModel() {

            public String getColumnName(int col) {
                try {
                    return rsmd.getColumnLabel(col + 1);
                } catch (SQLException e) {
                    e.printStackTrace();
		    return null;
                }
            }

            public int getRowCount() {
                try {
                    rs.last();
                    return rs.getRow();
                } catch (SQLException e) {
                    e.printStackTrace();
		     return 0;
                }
            }

            public int getColumnCount() {
                try {
                    return rsmd.getColumnCount();
                } catch (SQLException e) {
                    e.printStackTrace();
		     return 0;
                }
            }

            public Object getValueAt(int row, int col) {
                try {
                    rs.absolute(row + 1);
                    return rs.getString(col + 1);
                } catch (SQLException e) {
                    e.printStackTrace();
		    return null;
                  }
            }

           //etc...
        };

Siguiente punto: 14.3- APIs de interés


Plataforma de soporte a curso y contenidos (c) German Bordel 2005.