Modelos de acceso a BD
2
Aplicación
Java
JDBC
DBMS
Cliente
Servidor BD
Protocolo
BD
Modelos de acceso a BD
3
Aplicación
Java
JDBC
DBMS
Navegador
Web
Cliente (GUI)
Protocolo HTTP
Servidor
BD
Servlets, JSP
en servidor
WEB
Protocolo BD
Cargando el Driver
 Es necesario primero cargar una clase con el driver de
la base de datos (esto lo provee el vendedor de la
DBMS)
 Ejemplo:
Class c =
Class.forName(“com.informix.jdbc.IfxDriver");
Calss.forName(“com.novell.sql.LDAPDriver”);
Class.forName("com.mysql.jdbc.Driver");
 Esto es particular según la base de datos que se usa
 Luego hay que crear una instancia de la clase
c.newInstance();
4
Estableciendo la Conexión
 Un objeto “Connection” representa una
conexión a una base de datos.
 La clase “DriverManager” intenta ubicar
el controlador que pueda conectarse a
la base de datos representada en la
URL.
5
Connection con = DriverManager.getConnection (
url,login, password);
Connection
6
...Connection
7
Ejemplo de Connection
import java.sql.*;
import com.mysql.jdbc.*;
java.sql.Connection getConnection(String usr, String pass) {
url = "jdbc:mysql://localhost/test";
driver = "com.mysql.jdbc.Driver";
try {
Class.forName(driver).newInstance();
con = DriverDriverManager.getConnection(url, usr,pass);
return con;
} catch(Exception e2) {
System.err.println("Problems");
return null;
}
}
8
La clase Statement y Connection
 Connection con =
getConnection(…);
 Statement stmt=
con.createStatement();
 En este momento la statement existe
pero no tiene una sentencia SQL para
ejecutar. Esta se puede pasar con los
métodos
 executeUpdate(String), usada para crear/modificar tablas (no
hay resultados), típicamente para create, update, delete...
 executeQuery(String) para hacer consultas, retornan resultados
en un objeto de la clase ResultSet, típicamente para select
9
Statement s=con.createStatement();
s.executeUpdate(“...”);
Crear tabla
s.executeUpdate(
“create libros(”+
“ id char(20),” +
“ titulo char(50),” +
“ autor char(50,)” +
“ editorial char(20),” +
“ fecha char(8),” +
“ primary key(id))”
);
Crear y ejecutar comando
El ResultSet
ResultSet rs = stmt.executeQuery(“select
nombre where direccion like Santiago”);
while (rs.next()) {
String s = rs.getString(“nombre”);
int y = rs.getInt(“año”);
System.out.println(s+” “+y);
}
 ResultSet rs contiene una colección de filas con
los resultados de la pregunta. La instrucción next
avanza un puntero que indica en qué fila
estamos actualmente. Al principio está antes de
la primera fila, por lo cual se hace necesario
ejecutar un next() para situarse en la primera
11
ResultSet r=s.executeQuery(
“select * from libros where titulo like ‘%Java%’”);
String mayor=””;
while(r.next()){
String fecha=r.getString(“fecha”);
if(fecha.compareTo(mayor)>0) mayor=fecha;
}
//posicionar antes de primera fila
r.beforeFirst(); //r.absolute(0);
//recorrer libros de Java
while(r.next())
if( r.getString(“fecha”).equals(mayor) )
System.out.println(
r.getString(“id”)+r.getString(“titulo”));
Conclusiones
Prepared Statements
13
Prepared Statements: Ejemplo
PreparedStatement updateSales;
String updateString = "update COFFEES “+
"set SALES = ? where COF_NAME
like ?";
updateSales = con.prepareStatement(updateString);
int [] salesForWeek = {175, 150, 60, 155, 90};
String [] coffees = {"Colombian", "French_Roast",
"Espresso", "Colombian_Decaf",
"French_Roast_Decaf"};
int len = coffees.length;
for(int i = 0; i < len; i++) {
updateSales.setInt(1,salesForWeek[i]);
updateSales.setString(2, coffees[i]);
updateSales.executeUpdate();
}
14
Transacciones
15
Transacciones
16
Stored Procedures
17
Un ejemplo
Para crear el Stored Procedure
String crearSP = “create prodcedure SHOW_SUPPLIERS”+
“ as ”+
“select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME”+
“from SUPPLIERS, COFFEES ”+
“where SUPPLIERS.SUP_ID = COFFEES.SUP_ID”
Statement stmt = con.CreateStatement();
stmt.executeQuery(createSP);
Para llamar el Stored Procedure
CallableStatement cs;
cs = con.prepareCall(“{call SHOW_SUPPLIERS}”);
ResultSet rs = cs.executeQuery();
18

Connection en Java

  • 2.
    Modelos de accesoa BD 2 Aplicación Java JDBC DBMS Cliente Servidor BD Protocolo BD
  • 3.
    Modelos de accesoa BD 3 Aplicación Java JDBC DBMS Navegador Web Cliente (GUI) Protocolo HTTP Servidor BD Servlets, JSP en servidor WEB Protocolo BD
  • 4.
    Cargando el Driver Es necesario primero cargar una clase con el driver de la base de datos (esto lo provee el vendedor de la DBMS)  Ejemplo: Class c = Class.forName(“com.informix.jdbc.IfxDriver"); Calss.forName(“com.novell.sql.LDAPDriver”); Class.forName("com.mysql.jdbc.Driver");  Esto es particular según la base de datos que se usa  Luego hay que crear una instancia de la clase c.newInstance(); 4
  • 5.
    Estableciendo la Conexión Un objeto “Connection” representa una conexión a una base de datos.  La clase “DriverManager” intenta ubicar el controlador que pueda conectarse a la base de datos representada en la URL. 5 Connection con = DriverManager.getConnection ( url,login, password);
  • 6.
  • 7.
  • 8.
    Ejemplo de Connection importjava.sql.*; import com.mysql.jdbc.*; java.sql.Connection getConnection(String usr, String pass) { url = "jdbc:mysql://localhost/test"; driver = "com.mysql.jdbc.Driver"; try { Class.forName(driver).newInstance(); con = DriverDriverManager.getConnection(url, usr,pass); return con; } catch(Exception e2) { System.err.println("Problems"); return null; } } 8
  • 9.
    La clase Statementy Connection  Connection con = getConnection(…);  Statement stmt= con.createStatement();  En este momento la statement existe pero no tiene una sentencia SQL para ejecutar. Esta se puede pasar con los métodos  executeUpdate(String), usada para crear/modificar tablas (no hay resultados), típicamente para create, update, delete...  executeQuery(String) para hacer consultas, retornan resultados en un objeto de la clase ResultSet, típicamente para select 9
  • 10.
    Statement s=con.createStatement(); s.executeUpdate(“...”); Crear tabla s.executeUpdate( “createlibros(”+ “ id char(20),” + “ titulo char(50),” + “ autor char(50,)” + “ editorial char(20),” + “ fecha char(8),” + “ primary key(id))” ); Crear y ejecutar comando
  • 11.
    El ResultSet ResultSet rs= stmt.executeQuery(“select nombre where direccion like Santiago”); while (rs.next()) { String s = rs.getString(“nombre”); int y = rs.getInt(“año”); System.out.println(s+” “+y); }  ResultSet rs contiene una colección de filas con los resultados de la pregunta. La instrucción next avanza un puntero que indica en qué fila estamos actualmente. Al principio está antes de la primera fila, por lo cual se hace necesario ejecutar un next() para situarse en la primera 11
  • 12.
    ResultSet r=s.executeQuery( “select *from libros where titulo like ‘%Java%’”); String mayor=””; while(r.next()){ String fecha=r.getString(“fecha”); if(fecha.compareTo(mayor)>0) mayor=fecha; } //posicionar antes de primera fila r.beforeFirst(); //r.absolute(0); //recorrer libros de Java while(r.next()) if( r.getString(“fecha”).equals(mayor) ) System.out.println( r.getString(“id”)+r.getString(“titulo”)); Conclusiones
  • 13.
  • 14.
    Prepared Statements: Ejemplo PreparedStatementupdateSales; String updateString = "update COFFEES “+ "set SALES = ? where COF_NAME like ?"; updateSales = con.prepareStatement(updateString); int [] salesForWeek = {175, 150, 60, 155, 90}; String [] coffees = {"Colombian", "French_Roast", "Espresso", "Colombian_Decaf", "French_Roast_Decaf"}; int len = coffees.length; for(int i = 0; i < len; i++) { updateSales.setInt(1,salesForWeek[i]); updateSales.setString(2, coffees[i]); updateSales.executeUpdate(); } 14
  • 15.
  • 16.
  • 17.
  • 18.
    Un ejemplo Para crearel Stored Procedure String crearSP = “create prodcedure SHOW_SUPPLIERS”+ “ as ”+ “select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME”+ “from SUPPLIERS, COFFEES ”+ “where SUPPLIERS.SUP_ID = COFFEES.SUP_ID” Statement stmt = con.CreateStatement(); stmt.executeQuery(createSP); Para llamar el Stored Procedure CallableStatement cs; cs = con.prepareCall(“{call SHOW_SUPPLIERS}”); ResultSet rs = cs.executeQuery(); 18