De2
capasCliente
La aplicación "habla"
directamente con la base
de datos.
Protocolo
BD
Controlador JDBC se
comunica con el
sistema específico que
maneja
la base de datos.
DBMS
La base de datos puede
estar en otra máquina,Servidor BD
con lo que el cliente se
comunica por red. Esta
es la configuración
llamada cliente/servidor.
Aplicación
Java
JDBC
MODELO DE ACCESO A BD
MODELOS
Cliente (GUI)
DE ACCESO A BD
• Los comandos son enviados a
la capa intermedia de
servicios, la cual envía
sentencias SQL a la base de
datos. Ésta las procesa y
envía los resultados de
vuelta a la capa intermedia,
para luego ser enviados al
cliente.
Protocolo HTTP
Servlets, JSP
en servidor
WEB
• Permite
acceso
un control de
y de actualización.
Protocolo BD
• Provee ventajas de
performance.
Servidor
BD
DBMS
Navegador
Web
Aplicación
Java
JDBC
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
clase
usa
Luego hay que crear una instancia de la
c.newInstance();
ESTABLECIENDO LA CONEXIÓN
Connection con = DriverManager.getConnection (
url,login, password);
 Un objeto “Connection” representa una
conexión a una base de datos.
La clase “DriverManager” intenta ubicar
el controlador que pueda conectarse
la base de datos representada en la
URL.
a
CONNECTION
Ejemplos de
URL:
• jdbc:mysql://localhost/test {para
• jdbc:oracle://oraserver
• jdbc:odbc:mydatabase
ejemplos)
• jdbc:ldap://server;baseDN=baseDN;useCleartext=true
CONNECTION
Sintáxis de una URL JDBC:
•
•
jdbc:<subprotocolo>:<subnombre>
<subprotocolo> es el nombre del
controlador o del mecanismo de
conexión. Ejemplo: odbc.
<subnombre> es la identificación de• la
base de datos. El formato varia según
el controlador especificado. Ejemplo:
//servidor:puerto/bd y parámetros
Ejemplo de Connection
import java.sql.*;
import com.mysql.jdbc.*;
java.sql.Connection getConnection(String usr, String
url = "jdbc:mysql://localhost/test";
driver = "com.mysql.jdbc.Driver";
8
pass) {
try {
Class.forName(driver).newInstance();
con = DriverDriverManager.getConnection(url,
return con;
catch(Exception e2) {
System.err.println("Problems");
return null;
usr,pass);
}
}
}
La clase Statement y Connection
 Connection con =
getConnection(…);
 Statement stmt=
con.createStatement();
 En este momento la statement existe
pero no tiene
ejecutar. Esta
métodos
una sentencia SQL para
se puede pasar con los
 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

Crear y ejecutar comando
Statement s=con.createStatement();
s.executeUpdate(“...”);
Crear tabla
s.executeUpdate(
“create libros(”+
“
“
“
“
“
“
);
char(20),”id +
titulo char(50),” +
char(50,)”autor +
editorial char(20),” +
char(8),”fecha +
primary key(id))”
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
Conclusiones
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”));
Prepared Statements
• PreparedStatement us = con.prepareSatatement(
comuna = ? where direccion like = ?");
"update alumnos set
• us1.s3etString(l,'Santiago') us.setString(2,'Portugal');
Prepared Statements: Ejemplo
"set SALES = ? where COF_NAME
"Espresso", "Colombian_Decaf",
PreparedStatement updateSales;
String updateString = "update COFFEES “+
like ?";
updateSales = con.prepareStatement(updateString);
int [] salesForWeek = {175, 150, 60, 155, 90};
String [] coffees = {"Colombian", "French_Roast",
"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();
}
Transacciones
TRANSACCIONES
Para hacer uso de transacciones
debe primero dessetearse
commit
elauto
•
•
•
•
•
•
con .setAutoCom m it(false)
=....
.
PreparedStatement ps
ps.executeUpdate()
ps.excecuteUpdate()
con.commit();
.
.
STORED PROCEDURES
Es un grupo de sentencias SQL que se agrupan
lógicamente en una unidad para efectuar una
determinada tarea
Existen en la mayoría de los DBMS pero son
dependientes de estas {no es muy estándar
cómo se escriben/ejecutan)
la forma
Generalmente reciben parámetros
Se "escriben" con un Update y se ejecutan
Query
con un
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();

Connection Java

  • 2.
    De2 capasCliente La aplicación "habla" directamentecon la base de datos. Protocolo BD Controlador JDBC se comunica con el sistema específico que maneja la base de datos. DBMS La base de datos puede estar en otra máquina,Servidor BD con lo que el cliente se comunica por red. Esta es la configuración llamada cliente/servidor. Aplicación Java JDBC MODELO DE ACCESO A BD
  • 3.
    MODELOS Cliente (GUI) DE ACCESOA BD • Los comandos son enviados a la capa intermedia de servicios, la cual envía sentencias SQL a la base de datos. Ésta las procesa y envía los resultados de vuelta a la capa intermedia, para luego ser enviados al cliente. Protocolo HTTP Servlets, JSP en servidor WEB • Permite acceso un control de y de actualización. Protocolo BD • Provee ventajas de performance. Servidor BD DBMS Navegador Web Aplicación Java JDBC
  • 4.
    CARGANDO EL DRIVER Esnecesario 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 clase usa Luego hay que crear una instancia de la c.newInstance();
  • 5.
    ESTABLECIENDO LA CONEXIÓN Connectioncon = DriverManager.getConnection ( url,login, password);  Un objeto “Connection” representa una conexión a una base de datos. La clase “DriverManager” intenta ubicar el controlador que pueda conectarse la base de datos representada en la URL. a
  • 6.
    CONNECTION Ejemplos de URL: • jdbc:mysql://localhost/test{para • jdbc:oracle://oraserver • jdbc:odbc:mydatabase ejemplos) • jdbc:ldap://server;baseDN=baseDN;useCleartext=true
  • 7.
    CONNECTION Sintáxis de unaURL JDBC: • • jdbc:<subprotocolo>:<subnombre> <subprotocolo> es el nombre del controlador o del mecanismo de conexión. Ejemplo: odbc. <subnombre> es la identificación de• la base de datos. El formato varia según el controlador especificado. Ejemplo: //servidor:puerto/bd y parámetros
  • 8.
    Ejemplo de Connection importjava.sql.*; import com.mysql.jdbc.*; java.sql.Connection getConnection(String usr, String url = "jdbc:mysql://localhost/test"; driver = "com.mysql.jdbc.Driver"; 8 pass) { try { Class.forName(driver).newInstance(); con = DriverDriverManager.getConnection(url, return con; catch(Exception e2) { System.err.println("Problems"); return null; usr,pass); } } }
  • 9.
    La clase Statementy Connection  Connection con = getConnection(…);  Statement stmt= con.createStatement();  En este momento la statement existe pero no tiene ejecutar. Esta métodos una sentencia SQL para se puede pasar con los  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 
  • 10.
    Crear y ejecutarcomando Statement s=con.createStatement(); s.executeUpdate(“...”); Crear tabla s.executeUpdate( “create libros(”+ “ “ “ “ “ “ ); char(20),”id + titulo char(50),” + char(50,)”autor + editorial char(20),” + char(8),”fecha + primary key(id))”
  • 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
  • 12.
    Conclusiones 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”));
  • 13.
    Prepared Statements • PreparedStatementus = con.prepareSatatement( comuna = ? where direccion like = ?"); "update alumnos set • us1.s3etString(l,'Santiago') us.setString(2,'Portugal');
  • 14.
    Prepared Statements: Ejemplo "setSALES = ? where COF_NAME "Espresso", "Colombian_Decaf", PreparedStatement updateSales; String updateString = "update COFFEES “+ like ?"; updateSales = con.prepareStatement(updateString); int [] salesForWeek = {175, 150, 60, 155, 90}; String [] coffees = {"Colombian", "French_Roast", "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(); }
  • 15.
  • 16.
    TRANSACCIONES Para hacer usode transacciones debe primero dessetearse commit elauto • • • • • • con .setAutoCom m it(false) =.... . PreparedStatement ps ps.executeUpdate() ps.excecuteUpdate() con.commit(); . .
  • 17.
    STORED PROCEDURES Es ungrupo de sentencias SQL que se agrupan lógicamente en una unidad para efectuar una determinada tarea Existen en la mayoría de los DBMS pero son dependientes de estas {no es muy estándar cómo se escriben/ejecutan) la forma Generalmente reciben parámetros Se "escriben" con un Update y se ejecutan Query con un
  • 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();