DIapositivas JDBC 04-06-2013

Embed Size (px)

DESCRIPTION

JDBC en java

Citation preview

  • Java & Conexin a Base de Datos

    9JDBC (Java DataBase Connectivity) es API Java que permite a las aplicaciones interactuar directamente con motores de base de datos relacionales.

    9La API JDBC es una parte integral de la plataforma Java, por lo tanto no es necesario descargar ningn paquete adicional para usarla. Incluye manejo de conexiones a la base de datos, ejecucin de sentencias SQL y result sets que encapsulan los resultados de la recuperacin de datos.

    9JDBC provee una interface nica, que independiza a las aplicaciones del motor de base de datos usado y del mecanismo de conexin.

    9JDBC generaliza las funciones de acceso a datos ms comunes. Los mtodos estn contenidos en los paquetes: java.sql y java.txt.

    9Un driver JDBC es usado por la JVM para traducir las invocaciones JDBC genricas en invocaciones que la bd propietaria entiende. Los drivers son clases Java que se cargan en ejecucin.

    9Existen drivers JDBC para la mayora de los motores de base de datos ms populares. Tpicamente, los fabricantes de bases de datos proveen el driver JDBC para su motor, aunque tambin es posible encontrarlos en Internet.

  • Cdigo JAVA

    API ODBC

    Driver ODBC Puente

    JDBC-ODBC

    Tipos de Drivers JDBC

    Los drivers JDBC se clasifican en cuatro categoras:

    9Drivers Tipo 1 Se conecta con la bd

    Traduce cdigo java

    en invocaciones

    ODBC

    Driver ODBC Puente

    JDBC-ODBC

    Cdigo JAVA

    Base de Datos API ODBC

    oEl driver JDBC-ODBC es parte de la plataforma Java. No es un driver 100 % Java.

    oTraduce invocaciones JDBC a invocaciones ODBC a travs de libreras ODBC del sistema operativo.

    oNo es una solucin buena, pero en algunas situaciones es la nica, tal es el caso de Microsoft Access.

    Desventajas

    oSe requieren mltiples capas de software para hacer las llamadas a la BD.

    oSe requiere la instalacin de software adicional (configuracin ODBC).

  • Driver

    JDBC

    Cdigo JAVA

    Tipos de Drivers JDBC

    9Drivers Tipo 2

    Protocolo especfico

    del Proveedor

    Driver

    JDBC

    Es un driver que usa protocolos de acceso a datos optimizados por el

    fabricante

    Cdigo JAVA

    Base de Datos Cdigo Java y Nativo

    oConceptualemente es similar al driver de tipo 1, excepto en que se usa una capa menos (no est la capa de traduccin ODBC). No es un driver 100 % Java.

    oCuando se realiza una invocacin a la BD a travs de JBDC, el driver traduce el requerimiento en algo que la API del fabricante de la bd entiende.

    oLa BD procesa el requerimiento y devuelve el resultado a travs de la API que lo reenva al driver. El driver formatea el resultado al estndar JDBC y lo devuelve al programa.

  • Cdigo JAVA Servidor de

    Acceso a DB

    Driver

    Tipo 1 2 JDBC Driver

    (Java puro)

    Tipos de Drivers JDBC

    Front-End que accede al

    9Drivers Tipo 3 middleware. Es un proxydriver

    Base de Datos

    Driver Tipo 1 2

    Servidor de

    Acceso a DB

    JDBC Driver (Java puro)

    Cdigo JAVA

    oNo es un driver, es un front-end para acceso a servidores de bd.

    oEl programa enva una invocacin JDBC a travs del proxy driver, quien lo enva a la capa intermedia o middleware, sin traduccin.

    oEl middleware completa el requerimiento usando otro driver JDBC.

    oEl middleware habla con la BD a travs de un driver Tipo 1 o 2.

    oRequiere de la instalacin de un middleware.

  • Cdigo JAVA

    Tipos de Drivers JDBC

    9Drivers Tipo 4

    Protocolo especfico del Proveedor

    DriverJDBC

    (Java Puro)

    Cdigo JAVA

    Base de Datos

    oEs un driver Java Puro que habla directamente con la BD.

    oEs el mtodo ms eficiente de acceso a BD.

    oNo requiere de ninguna librera adicional ni de la instalacin de un middleware, con lo cual es de deployment ms simple.

    oLa mayora de los fabricantes de BD proveen drivers JDBC de tipo 4 para sus BD.

  • La API JDBC

    Las clases e interfaces de la API JDBC estn en los paquetes java.sql y java.text.

    En estos paquetes se encuentran definidos mtodos que permiten: conectarse a una BD, recuperar informacin acerca de la BD, realizar queries SQL a la BD y ejecutar Stored Procedures.

    DriverManager Statement Connection ResultSet ResultSetMetaData DataBaseMetaData

    PreparedStatement

    CallableStatement

  • La API JDBC

    Establecer una Conexin a la BD va JDBC

    La conexin se establece a travs del driver, que se carga en ejecucin mediante el mtodo: Class.forName(String nombredelDriver)

    Una vez cargado el driver, la conexin a la BD se realiza invocando a alguno de los siguientes mtodos (de clase) de la clase java.sql.DriverManager :

    public static synchronized Connnection getConnection(String url, java.util.Properties info) throws SQLException

    public static synchronized Connnection getConnection(String url, String usr, String pwd) throws SQLException

    public static synchronized Connnection getConnection(String url) throws SQLException

    El objeto Connection que se devuelve al programa se usa para realizar todas las operaciones sobre la BD.

  • La API JDBC

    Ejemplo de conexin a una BD

    . . .

    Connection miConexion;

    try {

    Nombre del Driver URL de la Base de Datos (Nombre del ODBC)

    Esta conexin ser usada para realizar todas las operaciones sobre la Base de Datos.

    Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

    miConexion = DriverManager.getConnection(jdbc:odbc:empleadosDB);

    . . .

    } catch (ClassNotFounException e1) {

    // captura el error: no se encontr el driver

    } catch (SQLException e2) {

    // captura el error: no se pudo conectar a la BD

    }

    Se deben manejar dos excepciones. Una es para controlar si el Driver no es encontrado y la otra para verificar si se realiz la

    conexin.

  • La API JDBC

    Ejecucin de sentencias SQL y Recuperacin de Resultados

    Para realizar una consulta SQL a la BD se requiere de la creacin de un objeto: Statement, PreparedStatement o CallableStatement usando uno de los mtodos del objeto Connection.

    Statement createStatement() throws SQLException

    Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException

    PreparedStatement prepareStatement(String sql) throws SQLException

    PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)

    throws SQLException Sentencia SQL a ser ejecutada

    CallableStatement prepareCall(String sql) throws SQLException

    PreparedStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency)

    Store Procedure a ejecutarse

    Se usa para ejecutar Stored Procedures

    throws SQLException

  • La API JDBC

    Ejecucin de sentencias SQL y Recuperacin de Resultados

    Clase Statement

    Sobre el objeto Statement que devuelve el mtodo createStatement() se ejecuta la sentencia SQL, que puede devolver o no resultados:

    void executeUpdate(String sql) throws SQLException

    Se usa para ejecutar las sentencias SQL: CREATE TABLE, INSERT, UPDATE Y DELETE

    ResulSet executeQuery(String sql) throws SQLException

    Se usa para ejecutar la sentencia SQL: SELECT

    El objeto ResulSet puede ser recorrido y actualizado, de acuerdo a como fue creado el objeto Statemament

  • La API JDBC

    Ejecucin de sentencias SQL y Recuperacin de Resultados El resultado de un executeQuery(), es devuelto en un objeto ResultSet. Este objeto contiene un cursor que puede manipularse para hacer referencia a una fila particular del Resultset. Inicialmente se ubica en la posicin anterior a la primera fila. El mtodo next() avanza una fila. Cada invocacin a next() retorna true si se trata de una fila vlida y false cuando se llega al fin del resultset.

    9Recorrer el ResultSet

    boolean next() throws SQLException

    boolean first() throws SQLException

    boolean last() throws SQLException

    Si el ResultSet es scroleable

    Devuelve true si el cursor est en una fila vlida y false si el

    ResultSet est vaci

    9Recuperar y Actualizar campos del ResultSet Los campos de cada fila del resultset puede obtenerse mediante su nombre o posicin. El mtodo a usar depende del tipo de dato almacenado

    String getString(int indiceColum) throws SQLException

    String getString(String nombreCol) throws SQLException

    int getInt(int indiceCol) throws SQLException

    int getInt(String nombreCol) throws SQLException

    void updateString(int indiceColum, String y) throws SQLException

    ......................................... .........

    Si el ResultSet es actualizable

    Para actualizar la bd se invoca a

    updateRaw()

  • La API JDBC

    Ejecucin de sentencias SQL y Recuperacin de Resultados

    String creaTablaEmple = CREATE TABLE Empleados (Apellido VARCHAR(32),+

    Nombres VARCHAR(), Legajo VARCHAR(), Edad INTEGER);

    try {

    Statement sent = miConexion.createStatement();

    sent.executeUpdate(creaTablaEmple);

    } catch (SQLException e1) { }

    try { Statement sent = miConexion.createStatement();

    ResultSet resul = sent.executeQuery(SELECT * FROM Empleados WHERE Edad>55);

    while (resul.next()){

    out.println(resul.getString( APELLIDO+,+resul.getString(Apellido));

    }

    } catch (SQLException e1) { }

  • La API JDBC

    Prepared Statement

    Un sentencia preparada (prepared statement) es un tipo de sentencia que mejora la performance de las consultas.

    Una sentencia preparada se precompila antes de ser usada. La versin precompilada acepta diferente nmero de parmetros.

    A diferencia de las sentencias tradicionales cuando se crean requieren de la sentencia SQL como argumento del constructor. Esta sentencia es enviada al motor de BD para su compilacin y cuando se ejecuta el motor de BD la corre sin previa compilacin.

    Las sentencias preparadas manejan parmetros, con lo cual pueden ejecutares muchas veces con distintos parmetros.

    9Creacin de una sentencia preparada

    PreparedStatement ps = cn.prepareStatement(SELECT * FROM Empledos+ Apellido, Nombre WHERE edad >?)

    Parmetro de la sentencia SELECT

    9Configuracin de los parmetros antes de la ejecucin de la sentencia

    ps.setInt(1, 55);

    ps.executeQuery();

    Setea los parmetros de la sentencia pre-compilada

    Ejecuta la sentencia pre-compilada