Вы находитесь на странице: 1из 17

Programacin de JDBC MYSQL

Qu es JDBC ?

JDBC es un API (Application programming interface) que describe o define una librera estndar para acceso a fuentes de datos, principalmente orientado a Bases de Datos relacionales que usan SQL (Structured Query Language). JDBC no slo provee un interfaz para acceso a motores de bases de datos, sino que tambindefine una arquitectura estndar, para que los fabricantes puedan crear los drivers que permitan a las aplicaciones java el acceso a los datos. Sun define JDBC como: The JDBC API is the industry standard for database-independent connectivity between the Java programming language and a wide range of databases.

Filosofa y Objetivos de JDBC

Cuando SUN se puso a trabajar en este tema, decidi seguir una serie de normas a seguir para la definicin del interfaz, y que han condicionado en gran manera el resultado final. Algunas de estas caractersticas son: API A NIVEL SQL. JDBC es un API de bajo nivel, es decir, que est orientado a permitir ejecutar comandos SQL directamente, y procesar los resultados obtenidos. Esto supone que ser tarea del programador crear APIs de ms alto nivel apoyndose directamente sobre JDBC.

Filosofa y Objetivos de JDBC

COMPATIBLE CON SQL. Cada motor de Base de Datos implementa una amplia variedad de comandos SQL, y muchos de ellos no tienen porque ser compatibles con el resto de motores de Base de Datos. JDBC, para solventar este problema de incompatibilidad, ha tomado la siguiente posicin

JDBC permite que cualquier comando SQL pueda ser pasado al driver directamente, con lo que una aplicacin Java puede hacer uso de toda la funcionalidad que provea el motor de Base de Datos, con el riesgo de que esto pueda producir errores o no en funcin del motor de Base de Datos. Con el objetivo de conseguir que un driver sea compatible con SQL (SQL compliant), se obliga a que al menos, el driver cumpla el Estndar ANSI SQL 92.

Filosofa y Objetivos de JDBC


JDBC debe ser utilizable sobre cualquier otro API de acceso a Bases de Datos, o ms en particular ODBC (Open Database Connectivity) JDBC debe proveer un interfaz homogneo al resto de APIs de Java. JDBC debe ser un API simple, y desde ah, ir creciendo. JDBC debe ser fuertemente tipado, y siempre que sea posible de manera esttica, es decir, en tiempo de compilacin, para evitar errores en tiempo de ejecucin.

JDBC debe mantener los casos comunes de acceso a Base de Datos lo ms sencillo posible:

Mantener la sencillez en los casos ms comunes (SELECT, INSERT, DELETE y UPDATE) Hacer realizables los casos menos comunes: Invocacin de procedimientos almacenados...

Crear mltiples mtodos para mltiple funcionalidad. JDBC ha preferido incluir gran cantidad de mtodos, en lugar de hacer mtodos complejos con gran cantidad de parmetros.

Procedimiento de Conexin y acceso a datos con JDBC.


Consideraciones previas. El proceso de acceso a una Base de Datos a travs de JDBC, exige dar una serie de pasos previos antes de crear la conexin al motor de Base de Datos. El primer paso es determinar el entorno en el que el proyecto va a ser instalado, y ms en concreto, que parmetros del entorno afectan directamente a JDBC: Qu motor de Base de Datos vamos a usar ? Debemos considerar las caractersticas especficas de una base de datos, como por ejemplo, como mapear los tipos de datos SQL a Java.

Qu driver vamos a usar ?


Es probable encontrarnos varios drivers distintos para la misma fuente de datos. Debemos saber detectar cual es el driver ms adecuado para nuestra aplicacin, por ejemplo, si elegimos un driver ODBC/JDBC, tendremos ms flexibilidad para elegir distintas fuentes de datos, pero si por ejemplo trabajamos con una Base de Datos Oracle, un driver JDBC diseado especficamente para esta base de datos ser mucho ms eficiente. Donde estar localizado el driver ? En funcin de donde se encuentre el driver fsicamente, debemos considerar aspectos de rendimiento y seguridad. Por ejemplo, si cargamos el driver desde un servidor remoto tendremos que considerar aspectos sobre seguridad de Java

Tipos de conectores (drivers) JDBC


Tipo 1. JDBC-ODBC bridge ms driver ODBC: BRIDGE Permite el acceso a Base de Datos JDBC mediante un driver ODBC. Cada mquina cliente que use el puente, debe tener libreras clientes de ODBC(dll propias del S.O) Ventajas: Buena forma de aprender JDBC. Tambin puede ser buena idea usarlo, en sistemas donde cada mquina cliente tenga ya instalado los drivers ODBC. Tambin es posible que sea la nica forma de acceder a ciertos motores de Bases de Datos. Inconvenientes: No es buena idea usar esta solucin para aplicaciones que exijan un gran rendimiento, ya que la transformacin JDBC-ODBC es costosa. Tampoco es buena solucin para aplicaciones con alto nivel de escalabilidad.

Tipos de conectores (drivers) JDBC


Tipo 2. Driver Java parciales: NATIVE Traducen las llamadas al API de JDBC Java en llamadas propias del motor de Base de Datos (Oracle, Informix...). Al igual que el tipo anterior, exige en las mquinas clientes cdigo binario propio del cliente de la Base de datos especfica y del sistema operativo Ventajas: Mejor rendimiento que el anterior. Quiz puede ser buena solucin para entornos controlados como intranets. Ejemplo OCI oracle. Inconvenientes: Principalmente la escalabilidad, ya que estos drivers exigen que en la mquina cliente libreras del cliente de la Base de Datos.

Tipos de conectores (drivers) JDBC


Tipo 3. Driver JDBC a travs de Middleware: NETWORK Traduce las llamadas al API JDBC en llamadas propias del protocolo especfico del broker. ste se encargar de traducirlas de nuevo en sentencias propias del motor de Base de Datos de cada caso. Ventajas: Buena solucin cuando necesitamos acceder a Bases de Datos distintas y se quiere usar un nico driver JDBC para acceder a las mismas. Al residir la traduccin en el servidor del middleware, los clientes no necesitan libreras especficas, tan solo el driver. Inconvenientes: La desventaja principal reside en la configuracin del servidor donde se encuentra el middleware. Necesitar libreras especficas para cada motor de base de datos distinto, etc.

Tipos de conectores (drivers) JDBC


Tipo 4: Driver java puro (acceso directo a Base de Datos): THIN. Convierte o traduce las llamadas al API JDBC en llamadas al protocolo de red usado por el motor de bases de datos, lo que en realidad es una invocacin directa al motor de bases de datos. Ventajas: 100 % portable. Buen rendimiento. El cliente slo necesita el driver. Inconvenientes: Al ser independiente de la plataforma, no aprovecha las caractersticas especficas del S.O

Uso de JDBC

JDBC permite escribir aplicaciones Java que realicen cualquiera de estas tres actividades de programacin: Conectar a un origen de datos, como puede ser una base de datos.

Enviar consultas y sentencias de actualizacin a una base de datos.


Obtener y procesar los resultados recibidos de la base de datos como respuesta a una consulta. El siguiente fragmento de cdigo puede servir como un ejemplo sencillo de estos tres pasos:

Connection con = DriverManager.getConnection("jdbc:miDriverBD:miBaseDatos", "miNombreUsu ario", "miContrasea");


Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Tabla1");

while (rs.next()) {
int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }

Uso de JDBC

Este fragmento de cdigo realiza las siguientes acciones:

Crea un objeto DriverManager para realizar la conexin con un controlador (driver) especfico del tipo de bases de datos correspondiente y accede a la base de datos mediante el nombre de usuario y contrasea especificados. Crea un objeto Statement que guarda la consulta a la base de datos en lenguaje SQL. Crea un objeto ResultSet que almacena los resultados de la consulta. Ejecuta un bucle while que recupera y muestra esos resultados.

Arquitectura JDBC

El modelo ms sencillo de funcionamiento de la API JDBC se basa en un esquema de dos capas o niveles. En este modelo, una aplicacin o un applet Java se comunica directamente con el origen de los datos. Esto requiere un driver JDBC que pueda comunicarse con el tipo concreto de origen de datos al que se va a acceder.

Arquitectura JDBC

Las sentencias del usuario son enviados a la base de datos, y los resultados obtenidos son enviados de vuelta al usuario. La base de datos puede estar localizado en el mismo ordenador o bien en otra mquina a la que el usuario debe conectarse a travs de la red. Ese ltimo caso, es el correspondiente a una configuracin cliente/servidor, en la que el ordenador del usuario es el cliente, y el ordenador en el que se encuentra la base de datos es el servidor. La red utilizada para conectarlos puede ser una intranet, o bien, a travs de Internet. Otro modelo de conexin es llamado de tres niveles, en el que las sentencias del usuario se envan a un nivel intermedio, que puede ser un servidor con el driver JDBC, el cual las reenviar a la base de datos, y los resultados obtenidos llevarn el mismo camino de vuelta.

INSERT en JDBC
import java.io.*; import java.sql.*; public class InsertRecords{ public static void main(String[] args) { System.out.println("Insert records example using prepared statement!"); Connection con = null; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql: //localhost:3306/jdbctutorial","root","root"); try{ String sql = "INSERT movies VALUES(?,?)"; PreparedStatement prest = con.prepareStatement(sql); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter movie name:"); String mov = bf.readLine(); prest.setString(1, mov); System.out.println("Enter releases year of movie:"); int year = Integer.parseInt(bf.readLine()); prest.setInt(2, year); int count = prest.executeUpdate(); System.out.println(count + "row(s) affected"); con.close(); } catch (SQLException s){ System.out.println("SQL statement is not executed!"); } } catch (Exception e){ e.printStackTrace(); } } }

Update en JDBC
import java.sql.*; public class UpdatesRecords{ public static void main(String[] args) { System.out.println("Updates Records Example through Prepared Statement!"); Connection con = null; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jdbctutorial","root","root"); try{ String sql = "UPDATE movies SET title = ? WHERE year_made = ?"; PreparedStatement prest = con.prepareStatement(sql); prest.setString(1,"Sanam We wafafa"); prest.setInt(2,2005); prest.executeUpdate(); System.out.println("Updating Successfully!"); con.close(); } catch (SQLException s){ System.out.println("SQL statement is not executed!"); } } catch (Exception e){ e.printStackTrace(); } } }

Select en JDBC
import java.sql.*; public class SelectRecords{ public static void main(String[] args) { System.out.println("Select Records Example by using the Prepared Statement!"); Connection con = null; int count = 0; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection ("jdbc:mysql://localhost:3306/jdbctutorial","root","root"); try{ String sql = "SELECT title,year_made FROM movies WHERE year_made >= ? AND year_made <= ?"; PreparedStatement prest = con.prepareStatement(sql); prest.setInt(1,1980); prest.setInt(2,2004); ResultSet rs = prest.executeQuery(); while (rs.next()){ String mov_name = rs.getString(1); int mov_year = rs.getInt(2); count++; System.out.println(mov_name + "\t" + "- " + mov_year); } System.out.println("Number of records: " + count); prest.close(); con.close(); } catch (SQLException s){ System.out.println("SQL statement is not executed!"); } } catch (Exception e){ e.printStackTrace(); } } }

Вам также может понравиться