1. LABORATORIO DE PROGRAMACIÓN IILABORATORIO DE PROGRAMACIÓN II
CONNECTIONCONNECTION
Universidad Politécnica AmazónicaUniversidad Politécnica Amazónica
2. MODELOSDEACCESOABDMODELOSDEACCESOABD
• La aplicación “habla”
directamente con la base
de datos.
• Controlador jdbc se
comunica con el sistema
específico que maneja la
base de datos.
• La base de datos puede
estar en otra máquina,
con lo que el cliente se
comunica por red. Esta es
la configuración llamada
cliente/servidor.
Aplicación
Java
JDBC
DBMS
Cliente
Servidor BD
Protocolo
BD
DD
EE
22
CC
AA
PP
AA
SS
3. MODELOSDEACCESOABDMODELOSDEACCESOABD
• 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.
• Permite un control de
acceso y de actualización.
• Provee ventajas de
performance.
Aplicación
Java
JDBC
DBMS
Navegador
Web
Cliente (GUI)
Protocolo HTTP
Servidor
BD
Servlets, JSP
en servidor
WEB
Protocolo BD
DD
EE
33
CC
AA
PP
AA
SS
4. CARGANDO EL DRIVERCARGANDO 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();
5. PASOS PARA LA CONEXIÓNPASOS PARA LA CONEXIÓN
1. Cargar el controlador de la BD
2. Establecer una conexión entre el programa java y el
sistema de administración de la base de datos.
3. Enviar una sentencia sql a la bd mediante un objeto
statement
4. Recuperar los resultados de la bd y utilizarlos en el
programa.
6. ESTABLECIENDO DE LA CONEXIÓNESTABLECIENDO DE 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.
Connection con = DriverManager.getConnection (
url,login, password);
7. ESTABLECIMIENTO DE LAESTABLECIMIENTO DE LA
CONEXIÓNCONEXIÓN
7
• Solicitud al drivermanager para realizar una connection:
CONNECTION CON =
DRIVERMANAGER.GETCONNECTION(URL_BD);
CONNECTION CON =
DRIVERMANAGER.GETCONNECTION(URL_BD, USUARIO,
PALABRACLAVE);
• Cuando drivermanager recibe una petición getconnection le
envía la URL de JDBC a cada driver registrado. El primer
driver que reconoce la URL es el que estable la conexión.
• Si la petición no reconoce se genera una:
SQLEXCEPTION
9. ...CONEXIÓN...CONEXIÓN
• 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
9
11. ENVIANDOSENTENCIASSQLENVIANDOSENTENCIASSQL
• JDBC permite enviar cualquier tipo de sentencia SQL. Aunque ésta
fuera dependiente de la base de datos sólo se correría el riesgo de
incompatibilidad al cambiar de base de datos.
• Los objetos statement se usan para almacenar sentencias sql
STATEMENT STAT=CON.CREATESTATEMENT();
• A través del objeto statement se pueden realizar consultas sobre la
BD a través de una connection,
• La BD ejecuta la consulta y la devuelve en un resultset:
RESULTSET THERESULTS = STAT.EXECUTEQUERY(“CONSUL”);
12. ...ENVIANDO SENTENCIAS SQL...ENVIANDO SENTENCIAS SQL
• “Statement”: este objeto es usado para
enviar sentecias SQL simples. Es creado
por el método “createstatement”.
• “Preparedstatement”: este objeto es
usado para sentencias que requieren uno
o más parámetros. La sentencia es
precompilada y guardada para uso
futuro.
• “Callablestatement”: es usado para
ejecutar procedimientos almacenados en
la base de datos.
P
R
O
V
E
E
3
C
L
A
S
E
S
J
D
B
C
13. LA CLASE STATEMENT YLA CLASE STATEMENT Y
CONNECTIONCONNECTION
• 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
14. CREAR Y EJECUTAR COMANDOCREAR 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))”
);
15. EL RESULTSETEL 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
16. PREPARED STATEMENTSPREPARED STATEMENTS
16
• 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’);
17. 17
PREPARED STATEMENTS:PREPARED STATEMENTS:
EJEMPLOEJEMPLO
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();
}