Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Java7 JDBC
Java7 JDBC
Objetos
JDBC
Que es JDBC
4
Modelos de acceso a BD
De 2 capas
Cliente La aplicación “habla” directamente con
5
Modelos de acceso a BD
Cliente (GUI) De 3 capas
Navegador Los comandos son enviados a la
DBMS
Servidor performance.
BD
6
Correspondencia Datos SQL-Java
7
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");
c.newInstance();
8
Estableciendo la Conexión
9
Conexión
Ejemplos de URL:
jdbc:mysql://localhost/test (para ejemplos)
jdbc:oracle://oraserver
jdbc:odbc:mydatabase
jdbc:ldap://server;baseDN=baseDN;useCle
artext=true
10
Ejemplo de Conexión
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;
}
}
11
Enviando sentencias SQL
12
...Enviando sentencias SQL
13
La clase Statement
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
14
Crear y ejecutar comando
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))”
);
Agregar fila
s.executeUpdate(
“insert into libros values(”+
“‘JA1’,’Java’,’Alvarez’,’ACME’,’20060906’)”
);
s.executeUpdate(
“insert into lectores values(”+
“’123’,’rosa’,’Blanco 2120’,’9782000’,’’)”
);
s.executeUpdate(
“insert into prestamos values(‘”+
U.leerString(“id libro?”)+ “’,’”+
U.leerString(“id lector?”)+“’ ,’20060913’)”
);
Borrar filas
s.executeUpdate(
“delete from prestamos where idLibro=’JA1’”);
s.executeUpdate(
“delete from libros where idLibro=’”+
idLIbro.getText()+
“’”
);
s.executeUpdate(
“delete from libros where fecha<’”+
U.leerString(“fecha de eliminación?”)+
“’”
);
Actualizar filas
s.executeUpdate(
“update lectores set email=’rm@hotmail.com’”
+“where id=’123’”
);
s.executeUpdate(
“update from prestamos set fecha=’20060913’”
+“where idLibro=’JA1’”
);
Retorno de excuteUpdate
19
Ejemplos de excuteQuery
stmt.executeQuery(“select * from
alumnos “ + “where añonac = 1974”);
Los resultados de una consulta se reciben en
un objeto de la clase ResultSet
ResultSet rs = stmt.executeQuery(....);
Un ResultSet se puede ver como una
enumeración de filas que representan el
resultado
Existen métodos adecuados para recorrer los
elementos de esta enumeración y recuperar
los valores de las columnas (campos)
20
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
21
Consultar tabla libros
ResultSet r=s.executeQuery(“select ...”);
ref objeto
//recorrer filas
while( r.next() ){
//recuperar valor de una columna
String s=r.getString(“nombre columna”);
. . .
}
Libro(s) más recientes(s) de Java
ResultSet r=s.executeQuery(
“select * from libros where titulo like‘%Java%’”
+ ” and fecha=(select max(fecha) from libros “
+ “where titulo like‘%Java%’)”);
while(r.next())
System.out.println(
r.getString(“id”)+
r.getString(“titulo”));
La instrucción getXXX
25
La instrucción getXXX
Hay veces en que si bien, el tipo SQL no es el
mismo que el tipo XXX una conversión es posible
sin problemas (por ejemplo, con getString y
getObject se puede recuperar sin problemas
cualquier cosa)
Otras, en que la conversión es posible pero con
pérdida de información o con posible problema de
formateo (ej getByte para un numeric o un
longvarchar
Otras, es simplemente imposible (un getLong para
Time) y se lanza una Exception
26
Prepared Statements
Donde se ha usado Satement es generalmente posible
usar PreparedStatement para hacer más eficientes las
consultas
Una instrucción con PreparedStatement va a ser, en la
mayoría de los casos, traducida a una consulta SQL nativa
de la base de datos en tiempo de compilación
La otra ventaja es que es posible usar parámetros dentro
de ella, pudiendo hacer más flexibles las consultas o hacer
varias consultas distintas dentro de un ciclo cambiando el
valor de algunas variables
PreparedStatement us = con.prepareSatatement(
“update alumnos set comuna = ? where direccion
like = ?”);
us.setString(1,’Santiago’)
us.setString(2,’Portugal’);
27
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();
}
28
Usando los metadatos
Los metadatos son la información acerca de la
estructura de una Base de Datos o un ResultSet
Se obtiene con el método getMetaData()
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
int rowCount = 1;
while (rs.next()) {
29
Usando los metadatos
Ejemplo para conocer las tablas de una Base de Datos
30