Bases de Datos usando    Java : JDBC Ing. César Julio Bustacara Medina
JDBCJava permite conectarse a bases de datos usandoSQL-92 (Structured Query Language).La gran ventaja de esta utilidad es ...
JDBCLa API Java para el manejo de Bases de Datos esJDBC (¿Java DataBase Connectivity?).Este modelo no es una derivación de...
JDBCJDBC es una interface hacia SQL, el lenguajecomún de todas las BD relacionales modernas.Las BD de escritorio cuentan c...
Capas JDBC• Capa Aplicación (Application Layer)  – Conjunto de clases (API) usadas para    hacer llamados a la base de dat...
Capas JDBCDriver Layer                 Application Layer
Tipo de Drivers• JDBC-ODBC Bridge (1)  – Las llamadas JDBC son enviadas a una librería ODBC.• Librería Nativa (2)  – Usa l...
Tipo de Drivers• JDBC-ODBC Bridge (1)  – Las llamadas JDBC son enviadas a una librería ODBC.
Tipo de Drivers• Librería Nativa (2)  – Usa librerías nativas en C (Propias del RDBMS), para    trasladar instrucciones JD...
Tipo de Drivers• Protocolo de red.(3)  – Las llamadas JDBC son trasladadas a un protocolo    independiente de RDBMS y envi...
Tipo de Drivers• Protocolo/Librería Nativa 100% java (4)  – Las llamadas JDBC son convertidas directamente al    protocolo...
Modelo Two-Tier         Cliente/Servidor                        Aplicación                         ClienteAplicación      ...
Drivers JDBC• JDBC/OCI• Oracle thin• Servidor de drivers JDBC
Drivers JDBCoci :Intranets y para servidores middle-tier.Extranets, es necesario tener instalado  el firewall.Convierte su...
Modelo usando OCI                               Aplicación                                 Java                           ...
Drivers JDBCThin :•   Funciona para internet•   No “requiere” driver en el cliente•   Es 100% Java•   Funciona solamente s...
Modelo thin                                Aplicación                                  Java                               ...
Instalar el Driver• Para nuestro caso bajar la librería  classes12.zip si se esta usando oracle  8.1.5 o superior, de lo c...
Instalar el Driver• Coloquela en el directorio que desee y  adicionelo al classpath     pathclasses12.zip• Sugerencia: col...
Verificaciónimport java.sql.*;public class DriverLoader{   public static void main (String arg[]){          try{          ...
Verificación • Si hay error se despliega el mensajeClass oracle.jdbc.driver.OracleDriver not found in type declarationDriv...
Otra forma de registrar el           driverUsando el metodo forName de la clase(java.lang).•Cargar y registrar el driver a...
Capa Aplicación• Clases/Interfaces que permiten interactuar con  el RDBMS a través de instrucciones SQL (Select,  DDL, DML...
Capa Aplicación• Connection  – Representa una sesión con la conexión a la base de datos  – La función principal de connect...
Capa Aplicación• Statement  – Es el canal a través del cual se le envían instrucciones SQL a    la base de datos y se reci...
Capa Aplicación• PreparedStatement         (Hereda de Statement)  – Se usa cuando se llama “n” veces la misma    instrucci...
Capa Aplicación                   (PreparedStatement)• (continuación ejemplo)• sql = “SELECT * FROM productos WHERE id=? A...
Capa Aplicación• CallableStatemet (Hereda de Statement)   – Es usada para ejecutar StoredProcedure.   – Proporciona método...
Capa Aplicación• ResultSet  – Tiene el mismo comportamiento de un cursor  – Define los métodos, que permiten acceder al   ...
Capa Aplicación• ResultSet (Continuación)   – Ejemplo:      •   String sql=“select * from productos”      •   Statement st...
Capa Aplicación• ResultSetMetaData  – Contiene información acerca de las propiedades de cada una    de las columnas, que c...
Conexión a la B.D. con JDBCString url = “jdbc:oracle:thin:@nut.javeriana.edu.co:1521:DEPTO”String usuario = “miNombre”;Str...
Conexión a la Base de Datosimport java.sql.*;public class forNameLoader{    public static void main (String arg[]){       ...
Conexión• Los tres métodos de conexión son:public static synchronized Connection getConnection(String url)  throws SQLExce...
Operaciones sobre la base         de DatosStatement declaracion =  conexion.createStatement(); Statement st = con.createSt...
import java.sql.*;public class forNameLoader{   public static void main (String arg[]){           String url = “jdbc:oracl...
import java.sql.*;                                           Ejemplo           executeUpdatepublic class forNameLoader{   ...
import java.sql.*;                                    Ejemplo             executeQuerypublic class forNameLoader{   public...
JDBCEn resumen, suponiendo que queremos revisar losdatos de la tabla ’Temp usamos:...Statement sentencia = con.createState...
JDBCJava intentará realizar las conversiones detipos SQL a tipos Java de la forma más“razonable” posible.La correspondenci...
JDBC•Tipos de datos numéricosJava              SQL             Notasbyte              TINYINT       8 bitsint             ...
JDBC•Tipos de datos caracterJava     SQL                   NotasString   CHAR o CHARACTER Cadena rellenada con espaciosStr...
JDBCOtros tipos de datosJava                 SQL         Notasboolean              BIT         true/falsejava.sql.Data    ...
JDBC• Modelo de uso  Connection conexión   = null;  Statement declaración = null;  try {    Class.forName(“sun.jdbc.odbc.J...
JDBC• Usando excepciones// ExcepcionesEnJDBC                                          Parte 1/2import java.sql.*;public cl...
JDBC// ExcepcionesEnJDBC                                                    Parte 2/2        try {          declaración = ...
JDBCDeclaraciones preparadas.Una declaración preparada es una consultaespecial en la que se mantiene la estructura y secam...
Recursos– Sitio oficial JDBC   • java.sun.com/jdbc– Buscar drivers.   • http://industry.java.sun.com/products/jdbc/drivers...
Upcoming SlideShare
Loading in...5
×

Jdbc

755

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
755
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
69
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Jdbc

  1. 1. Bases de Datos usando Java : JDBC Ing. César Julio Bustacara Medina
  2. 2. JDBCJava permite conectarse a bases de datos usandoSQL-92 (Structured Query Language).La gran ventaja de esta utilidad es que una BD.puede migrarse y aún ser vista con el mismoprograma Java.Usualmente, una aplicación con acceso a BD. seprograma en un lenguaje propietario y sobre unsistema manejador de BD propietario.
  3. 3. JDBCLa API Java para el manejo de Bases de Datos esJDBC (¿Java DataBase Connectivity?).Este modelo no es una derivación de ODBC (OpenDataBase Connectivity)JDBC está escrito en JavaODBC está escrito en CEn esencia, la idea es la misma: un programadialoga con el JDBC driver manager quien a su vezse comunica con un controlador particular.
  4. 4. JDBCJDBC es una interface hacia SQL, el lenguajecomún de todas las BD relacionales modernas.Las BD de escritorio cuentan con GUIs paramanipular directamente los datos pero las BDservidor se controlan a través de SQL.Para conectarse a una BD se debe especificar elnombre de la BD y algunos parámetros adicionales.
  5. 5. Capas JDBC• Capa Aplicación (Application Layer) – Conjunto de clases (API) usadas para hacer llamados a la base de datos a través de SQL, obtener y procesar los resultados.• Capa Manejador (Driver Layer) – Conjunto de clases (API) que se encargan de establecer, manejar y terminar la comunicación con un RDBMS (Implementación especifica de un driver)
  6. 6. Capas JDBCDriver Layer Application Layer
  7. 7. Tipo de Drivers• JDBC-ODBC Bridge (1) – Las llamadas JDBC son enviadas a una librería ODBC.• Librería Nativa (2) – Usa librerías nativas en C (Propias del RDBMS), para trasladar instrucciones JDBC al cliente nativo.• Protocolo de red.(3) – Las llamadas JDBC son trasladadas a un protocolo independiente de RDBMS y enviadas a un servidor intermedio (AppServer) sobre un socket TCP/IP• Protocolo/Librería Nativa 100% java (4) – Las llamadas JDBC son convertidas directamente al protocolo del RDBMS
  8. 8. Tipo de Drivers• JDBC-ODBC Bridge (1) – Las llamadas JDBC son enviadas a una librería ODBC.
  9. 9. Tipo de Drivers• Librería Nativa (2) – Usa librerías nativas en C (Propias del RDBMS), para trasladar instrucciones JDBC al cliente nativo del RBDMS.
  10. 10. Tipo de Drivers• Protocolo de red.(3) – Las llamadas JDBC son trasladadas a un protocolo independiente de RDBMS y enviadas a un servidor intermedio (AppServer) sobre un socket TCP/IP
  11. 11. Tipo de Drivers• Protocolo/Librería Nativa 100% java (4) – Las llamadas JDBC son convertidas directamente al protocolo del RDBMS
  12. 12. Modelo Two-Tier Cliente/Servidor Aplicación ClienteAplicación B.D. Cliente Firewall
  13. 13. Drivers JDBC• JDBC/OCI• Oracle thin• Servidor de drivers JDBC
  14. 14. Drivers JDBCoci :Intranets y para servidores middle-tier.Extranets, es necesario tener instalado el firewall.Convierte sus llamados directamente en Net8.Funciona sobre varios protocolos
  15. 15. Modelo usando OCI Aplicación Java Driver JDBC/OCIAplicación Java Net8Driver B.D.JDBC/OCI Net8 Firewall
  16. 16. Drivers JDBCThin :• Funciona para internet• No “requiere” driver en el cliente• Es 100% Java• Funciona solamente sobre TCP/IP• No ofrece completa funcionalidad con Net8
  17. 17. Modelo thin Aplicación Java Driver thinAplicación Net8 Java Net8Driver B.D.thin Net8 Firewall
  18. 18. Instalar el Driver• Para nuestro caso bajar la librería classes12.zip si se esta usando oracle 8.1.5 o superior, de lo contrario usar la librería classes111.zip ubicadas en la páginahttp://technet.oracle.com/software
  19. 19. Instalar el Driver• Coloquela en el directorio que desee y adicionelo al classpath pathclasses12.zip• Sugerencia: colocarlo en:...jdk1.3jrelibextclasses12.zip• adicione el directorio al classpath
  20. 20. Verificaciónimport java.sql.*;public class DriverLoader{ public static void main (String arg[]){ try{ DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); } catch(Exception e){ e.printStackTrace(); } }}
  21. 21. Verificación • Si hay error se despliega el mensajeClass oracle.jdbc.driver.OracleDriver not found in type declarationDriverManager.registerDriver(new oracle.jdbc.driver.oracleDriver()); ^
  22. 22. Otra forma de registrar el driverUsando el metodo forName de la clase(java.lang).•Cargar y registrar el driver a memoria. – Class.forName(“ clase java del driver”)Ejemplos:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);//Odbc -tipo 1Class.forName(“oracle.jdbc.driver.OracleDriver”); //Oracle - Tipo 4
  23. 23. Capa Aplicación• Clases/Interfaces que permiten interactuar con el RDBMS a través de instrucciones SQL (Select, DDL, DML): – Connection – Statement – PreparedStatement – CallableStatement – ResultSet – ResultMetaData• Se agrupan bajo el paquete java.sql.*
  24. 24. Capa Aplicación• Connection – Representa una sesión con la conexión a la base de datos – La función principal de connection, es crear objetos tipo Statement (Statement,PreparedStatement, CallableStatement) – Cómo se crea: • Connection conn=DriverManager.getConnection ( url ); • Connection conn=DriverManager.getConnection ( url, user, password ); – Características transaccionales: • conn.setAutocommit(false/true); • conn.rollback(); • conn.commit();
  25. 25. Capa Aplicación• Statement – Es el canal a través del cual se le envían instrucciones SQL a la base de datos y se reciben los resultados. – Las instrucciones SQL puede ser instrucciones DML (Insert, Update, Delete), DDL (Create, Drop) o instrucciones SELECT. – Como se crea: – Statement stmt= conn.createStatement(); – Sobre una conexión se pueden tener n objetos Statement. – Métodos de ejecución: • Ejecución de instrucciones SELECT – ResultSet resultadoSelect = stmt.executeQuery(sql); • Ejecución de instrucciones DML/DDL – int resultadoDML = stmt.executeUpdate(sql);
  26. 26. Capa Aplicación• PreparedStatement (Hereda de Statement) – Se usa cuando se llama “n” veces la misma instrucción. – Permite el manejo de parámetros dinámicos – Ventajas técnicas sobre Statement: • Si se tiene Statement la instrucción SQL es compilada cada vez que se usa. • Con PreparedStatement solo compila una vez. – Como se crea: • PreparedStatement stmt= conn.prepareStatement(sql); – Ejemplo: • sql = “SELECT * FROM productos WHERE id=? And fecha=?” • PreparedStatement stmt= conn.prepareStatement(sql);
  27. 27. Capa Aplicación (PreparedStatement)• (continuación ejemplo)• sql = “SELECT * FROM productos WHERE id=? And fecha=?” – Parámetro 1 : id – Parámetro 2 : fecha• Como se pasan los parámetros – stmt.setInt(1,“10”); //Si quisiéramos el producto 10 – stmt.setDate(2,“03/09/2001”) //Los productos creados hoy. Metodo Tipo dato SQL setBoolean Bit• Otros tipo de datos (setXXX) setDate Date setDouble Double setFloat Float setString String,Varchar
  28. 28. Capa Aplicación• CallableStatemet (Hereda de Statement) – Es usada para ejecutar StoredProcedure. – Proporciona métodos para mapear los parámetros de salida del Stored Procedure – Como se crea:• CallableStatement cs = conn.prepareCall("{call <StoredProc>}"); – Donde <StoredProc>, es el nombre del StoredProcedure• Métodos para mapear los parámetros – cs.registerOutParameter (indiceParametro, tipodato); • Ej.: cs.registerOutParameter( 1, java.sql.Date);
  29. 29. Capa Aplicación• ResultSet – Tiene el mismo comportamiento de un cursor – Define los métodos, que permiten acceder al cursor generado como resultado de la ejecución de un SELECT. – El puntero esta ubicado antes de la primera fila. – Para moverse entre filas se emplea ResultSet.next() – Para obtener una columna especifica de la fila, se puede hacer invocando el método ResultSet.getXXX (xxx indica el tipo de datos)
  30. 30. Capa Aplicación• ResultSet (Continuación) – Ejemplo: • String sql=“select * from productos” • Statement stmt_ = conn.createStatemet(); • ResultSet resultado_ = stmt_.executeQuery(sql); • while(resultado_.next()){ • System.out.println(“ id producto--> ”+resultado_.getInt(“id”)); • System.out.println(“ producto--> ”+resultado_.getString(“nombre”)); • } Metodo Tipo dato SQL getBoolean Bit – Tipo de metodos getXXX getDate Date getDouble Double getFloat Float getString String,Varchar
  31. 31. Capa Aplicación• ResultSetMetaData – Contiene información acerca de las propiedades de cada una de las columnas, que conforman el cursor/tabla, que fue obtenida en la ejecución de una consulta. – Como se crea: • ResultSetMetaData rsmd = ResultSet.getMetaData(); • Ejemplo (Tomando como base el slide anterior): – ResultSet resultado = stmt.executeQuery(sql); – ResultSetMetaData metaData_ = resultado.getMetaData(); – Numero de Columnas: int cols = metadata.getColumnCount(); – Tipo Columna : String tipo = metadata.getColumnType(“id”); – Saber si un campo es auto incremento: • boolean esAutoIncremento = metadata.isAutoIncrement();
  32. 32. Conexión a la B.D. con JDBCString url = “jdbc:oracle:thin:@nut.javeriana.edu.co:1521:DEPTO”String usuario = “miNombre”;String password = “miClave”;Connection conexión = DriverManager.getConnection(url,usuario,password); DriverManager getConnectionEl driver manager intentará encontrar un drivercargado que pueda usar el protocolo especificado enla URL.Mediante la instancia de Connection (conexión)obtenida a través de getConnection se puedenejecutar expresiones SQL.
  33. 33. Conexión a la Base de Datosimport java.sql.*;public class forNameLoader{ public static void main (String arg[]){ String url = “jdbc:oracle:thin:@nut.javeriana.edu.co:1521:DEPTO” String usuario = “miNombre”; String password = “miClave”; try{ DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); try{ Connection con = DriverManager.getConnection(url,usuario,password); if (con!=null) System.out.println("Driver cargado"); else System.out.println("Driver No cargado"); } catch(Exception e){System.out.println("Error en la conexion a la BD"); } } catch(Exception e){e.printStackTrace();} }}
  34. 34. Conexión• Los tres métodos de conexión son:public static synchronized Connection getConnection(String url) throws SQLExceptionpublic static synchronized Connection getConnection(String url, String user, String password) throws SQLExceptionpublic static synchronized Connection getConnection(String url, Properties info) throws SQLException
  35. 35. Operaciones sobre la base de DatosStatement declaracion = conexion.createStatement(); Statement st = con.createStatement(); // // operaciones con st // st.close();
  36. 36. import java.sql.*;public class forNameLoader{ public static void main (String arg[]){ String url = “jdbc:oracle:thin:@nut.javeriana.edu.co:1521:DEPTO” String usuario = “miNombre”; String password = “miClave”; try{ DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); try{ Connection con = DriverManager.getConnection(url,usuario,password); if (con!=null){ Statement st = con.createStatement(); // // operaciones con st // st.close(); } else System.out.println("Driver No cargado"); } catch(Exception e){System.out.println("Error en la conexion a la BD"); } } catch(Exception e){e.printStackTrace();} }}
  37. 37. import java.sql.*; Ejemplo executeUpdatepublic class forNameLoader{ public static void main (String arg[]){ String url = “jdbc:oracle:thin:@nut.javeriana.edu.co:1521:DEPTO” String usuario = “miNombre”; String password = “miClave”; String query = “CREATE TABLE Paciente “ + “(id Number(9) NOT NULL PRIMARY KEY, ” + “nombre VarChar(50), apellido VarChar(50))”; try{ DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); try{ Connection con = DriverManager.getConnection(url,usuario,password); if (con!=null){ Statement st = con.createStatement(); int x = st.executeUpdate(query); System.out.println(“Tabla de pacientes creada”) st.close(); } else System.out.println("Driver No cargado"); } catch(Exception e){System.out.println("Error en la conexion a la BD"); } } catch(Exception e){e.printStackTrace();} }}
  38. 38. import java.sql.*; Ejemplo executeQuerypublic class forNameLoader{ public static void main (String arg[]){ String url = “jdbc:oracle:thin:@nut.javeriana.edu.co:1521:DEPTO” String usuario = “miNombre”; String password = “miClave”; String query = SELECT * FROM Pacientes”; try{ DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); try{ Connection con = DriverManager.getConnection(url,usuario,password); if (con!=null){ Statement st = con.createStatement(); ResulSet y = st.executeQuery(query); while(y.next()){ // Lo que quieran con los datos } y.close(); st.close(); } else System.out.println("Driver No cargado"); } catch(Exception e){System.out.println("Error en la conexion a la BD"); } } catch(Exception e){e.printStackTrace();} }}
  39. 39. JDBCEn resumen, suponiendo que queremos revisar losdatos de la tabla ’Temp usamos:...Statement sentencia = con.createStatement();ResultSet vista = sentencia.executeQuery(“SELECT * FROM Temp”);while (vista.next()) { // Revisar el segundo campo de cada registro String unregistro = vista.getString(2); int unregistro = vista.getInt(“nombre_de_campo_numerico”);}Los métodos que permiten inspeccionar el‘ResultSet’ aceptan el número del campo, contadosa partir de uno, o el nombre del campo.
  40. 40. JDBCJava intentará realizar las conversiones detipos SQL a tipos Java de la forma más“razonable” posible.La correspondencia entre tipos SQL comunesy los tipos de Java se ilustran en las siguientestablas:
  41. 41. JDBC•Tipos de datos numéricosJava SQL Notasbyte TINYINT 8 bitsint INTEGER o INT 32 bitsshort SMALLINT 16 bitslong BIGINT 64 bitsdouble DOUBLE 15 digitos de precisióndouble FLOAT 15 digitos de precisiónfloat REAL 7 digitos de precisiónjava.math.BigDecimal NUMERIC Números de precisión específicajava.math.BigDecimal DECIMAL Números de precisión específica
  42. 42. JDBC•Tipos de datos caracterJava SQL NotasString CHAR o CHARACTER Cadena rellenada con espaciosString VARCHAR CadenaString LONGVARCHAR Se puede leer usando un flujo de entradabyte[] BINARY La longitud del arreglo es la del campobyte[] VARBINARY La longitud del arreglo es la del campobyte[] LONGVARBINARY Se puede leer usando un flujo de entrada
  43. 43. JDBCOtros tipos de datosJava SQL Notasboolean BIT true/falsejava.sql.Data DATE mm / dd / aajava.sql.Time TIME hh / mm / ssjava.sql.TimeStamp TIMESTAMP Fecha y hora en nanosegundos
  44. 44. JDBC• Modelo de uso Connection conexión = null; Statement declaración = null; try { Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); conexión = DriverManager.getConnection(“jdbc:odbc:NombreBD”, “idUsuario”, “contraseña”); declaración = conexión.createStatement(); ResultSet resultado = declaración.executeQuery(“instrucción SQL”); while (resultado.next()) { int campoEntero = resultado.getInt(“NombreCampoEntero”); int campoReal = resultado.getString(“NombreCampoReal”); System.out.println(campoEntero + “ “ + campoReal); } } catch (ClassNotFoundException e) { System.err.println(“Controlador no encontrado”); } catch (SQLException e) { System.err.println(“Falla en la Base de Datos”); }
  45. 45. JDBC• Usando excepciones// ExcepcionesEnJDBC Parte 1/2import java.sql.*;public class ExcepcionesEnJDBC { public static void main(String argv[]) { Connection conexión = null; Statement declaración = null; try { Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); } catch(ClassNotFoundException e) { System.err.println(“Error: controlador no encontrado.”); System.exit(1); } try { conexión = DriverManager.getConnection(“jdbc:odbc:NombreBD”, “idUsuario”, “contraseña”); } catch (SQLException e) { System.err.println(“Error: falla en conexión a la base de datos.”); System.exit(2); }
  46. 46. JDBC// ExcepcionesEnJDBC Parte 2/2 try { declaración = conexión.createStatement(); } catch (SQLException e) { System.err.println(“Error: imposible crear la declaración.”); System.exit(3); } try { ResultSet resultado = declaración.executeQuery(“instrucción SELECT-SQL”); while (resultado.next()) { int campoEntero = resultado.getInt(“NombreCampoEntero”); int campoReal = resultado.getString(“NombreCampoReal”); System.out.println(campoEntero + “ “ + campoReal); } } catch(SQLException e) { System.err.println(“Error: en lectura de la Base de Datos”); } }}
  47. 47. JDBCDeclaraciones preparadas.Una declaración preparada es una consultaespecial en la que se mantiene la estructura y secambia solamente el dato que se requiera. SELECT * FROM NombreTabla WHERE campo=variable SELECT * FROM NombreTabla WHERE campo=? Connection conexión = null; Statement declaración = null; ... PreparedStatement declaraciónPreparada = conexión.prepareStatement( “SELECT * FROM NombreTabla WHERE campo=?”); declaraciónPreparada.setString(n, “valorCampo”); ... ResultSet resultado = declaraciónPreparada.executeQuery();
  48. 48. Recursos– Sitio oficial JDBC • java.sun.com/jdbc– Buscar drivers. • http://industry.java.sun.com/products/jdbc/drivers– Tutorial JDBC • http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/Gettin gStartedTOC.fm.html– Otros sitios de interes • www.theserverside.com • www.jdance.com • www.jguru.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×