Está en la página 1de 23

Programacin y Acceso a

BD con SQL
Pedro Pablo Alarcn
Agustn Yage
Departamento de O.E.I.
Escuela Universitaria de Informtica
Universidad Politcnica de Madrid
2001 P.P. Alarcn, A. Yage

? Programacin

en el Servidor

1. Introduccin ............................................... 2
2. Servidor de Datos ...................................... 2
3. Programacin de acciones y tareas .......... 3
?

Acceso desde Clientes


4. Arquitectura cliente/servidor ......................10
5. Conectividad de datos ...............................19
6. Utilizacin de SQL .....................................25

2001 P.P. Alarcn, A. Yage

1. Introduccin
?

Desarrollo de la aplicacin en el Servidor :


Definicin de datos
Manipulacin de datos
Programacin de acciones y tareas
Proporciona servicios de datos y negocio

? Desarrollo

de la aplicacin en el Cliente:

Proporciona el interface al usuario


Dependiente del lenguaje de programacin utilizado
para su implementacin
Proporciona servicios de usuario y negocio
2001 P.P. Alarcn, A. Yage

2. Servidor de Datos
?

En el servidor, habitualmente, tendremos


SGBD.

un

Debe permitir:
Definicin de datos (LDD)

Manipulacin de datos (LMD)


Control de datos (LCD)
Programacin de acciones y tareas (LDD y LMD)
En la mayora de los casos se utiliza SQL

Debe soportar al menos un protocolo de red basado en


TCP/IP
Nmero alto de clientes conectados y gestin de
transacciones y bloqueos concurrentes
2001 P.P. Alarcn, A. Yage

Servidor de Datos
?

Bases de Datos medias y grandes


Oracle, DB2, Informix , Sybase, ....
(mainframes.... Windows)

Bases de Datos pequeas y medias


SQLServer (servidor solo en Windows NT)
Interbase
Access, FoxPro, Paradox
MySQL (limitaciones: transacciones, integridad referencial,...)

......

2001 P.P. Alarcn, A. Yage

3. Programacin de Acciones y Tareas


? Lenguaje

de control de flujo

Extensiones de SQL
? Disparadores

Pequeo programa que se almacena con el


esquema de la base de datos y que se define para
que se ejecute de forma automtica como
resultado de alguna accin de actualizacin que
se lleva a cabo sobre la base de datos
? Procedimientos

almacenados

Parecido a un disparador excepto que se ejecuta


cuando es llamado desde un disparador, otro
procedimiento almacenado o un programa
2001 P.P. Alarcn, A. Yage

Programacin de Acciones y Tareas


? Disparadores

y procedimientos

almacenados
Suelen ir asociados a la capa de negocio de la
aplicacin y por tanto permiten trasladar al
servidor una parte de la lgica del negocio. La
utilizacin de disparadores permite disminuir el
trfico de red de la aplicacin, y facilita la lgica
del programa cliente que realiza el acceso a la
base de datos
Pueden entenderse como un entorno basado en
LDD y LMD, ya que se almacenan en el esquema
de la base de datos
2001 P.P. Alarcn, A. Yage

Lenguaje de Control de Flujo


?

Ampliacin de SQL
DECLARE para la definicin de variables
BEGIN .. END, para la definicin de bloques de
instrucciones SQL
IF .. ELSE para la ejecucin condicional
WHILE para ejecucin repetitiva o iterativa
RETURN, para
almacenados

la

definicin

de

procedimientos

PRINT, para el envo de mensajes a los usuarios


Comentarios

2001 P.P. Alarcn, A. Yage

Procedimientos Almacenados
? Compuestos

de

instrucciones SQL
instrucciones de control de flujo
? Son

compilados, por lo que su ejecucin es


rpida

? Pueden

recibir y devolver parmetros, que


permiten modularizar o descomponer
problemas grandes y complejos

2001 P.P. Alarcn, A. Yage

Procedimientos Almacenados
CREATE PROCEDURE calcularFunSueldo @tipoFun char(3),
@resultado money output
AS
if tipoFun = max
select @resultado= max(sueldo) from categoria
else if tipoFun = min
select @resultado= min(sueldo) from categoria
else if tipoFun = avg
begin
select @resultado= avg(sueldo) from categoria
end
return

2001 P.P. Alarcn, A. Yage

Disparadores
?

Un disparador es un conjunto de acciones que


se realizan automticamente cuando se intenta
hacer una actualizacin determinada sobre una
tabla especfica.

Son similares a los procedimientos


almacenados, con la salvedad que se ejecutan
al ocurrir un evento determinado

Eventos: insercin, modificacin y borrado.

2001 P.P. Alarcn, A. Yage

Disparadores
CREATE TRIGGER ActualizaStock
ON Pedidos
FOR insert, update , delete
Update Almacen
set stock = stock + (select cantidad from inserted
where inserted.codArt = Almacen.CodArt)
where codArt = inserted.codArt
Update Almacen
set stock = stock - (select cantidad from inserted
where deleted.codArt = Almacen.CodArt)
where codArt = deleted.codArt

2001 P.P. Alarcn, A. Yage

Interbase
CREATE PROCEDURE nombre [(param <tipodato> [, param <tipodato> ...])]
[RETURNS <tipodato> [, param <tipodato> ...])]
AS <cuerpo> [terminador]
<cuerpo> = [<listaVariables>] <bloque>
< listaVariables > = DECLARE VARIABLE var <tipodato>;
[DECLARE VARIABLE var <tipodato>; ...]
<bloque> =BEGIN
<sentencias>
[<sentencias> ...]
END
<sentencias> = {<bloque> | sentencia;}
EXECUTE PROCEDURE nombre [param [, param ...]];
2001 P.P. Alarcn, A. Yage

Interbase
CREATE TRIGGER nombre FOR tabla
[ACTIVE | INACTIVE] {BEFORE | AFTER}
{DELETE | INSERT | UPDATE}
[POSITION numero]
AS <cuerpo> terminador
<cuerpo> = [<lista_declaracion_variables>] <bloque>
< lista_declaracion_variables > =
DECLARE VARIABLE variable <tipodato>;
[DECLARE VARIABLE variable <tipodato>; ...]
<bloque> = BEGIN
<sentencia>
[<sentencia> ...]
END
<sentencia> = {<bloque> | sentencia;}
2001 P.P. Alarcn, A. Yage

Interbase
Cursor
DECLARE cursor CURSOR FOR <select>
[FOR UPDATE OF <col> [, <col>...]];
Sentencias asociadas: OPEN, FETCH, CLOSE

Funciones Externas
DECLARE EXTERNAL FUNCTION nombre [<tipodato> | CSTRING (int)
[, <tipodato> | CSTRING (int) ...]]
RETURNS {<tipodato> [BY VALUE] | CSTRING (int)}
ENTRY_POINT "<entryname>"
MODULE_NAME "<modulename>";
2001 P.P. Alarcn, A. Yage

SQL Server
CREATE PROC[EDURE] nombreProcedimiento [;nmero]
[{@parmetro tipoDatos} [VARYING] [= predeterminado] [OUTPUT]]
[,...n]
[WITH
{RECOMPILE
| ENCRYPTION
| RECOMPILE, ENCRYPTION
}
]
[FOR REPLICATION]
AS
instruccinSQL [...n]

2001 P.P. Alarcn, A. Yage

SQL Server
CREATE TRIGGER nombre ON tabla
[WITH ENCRYPTION]
{ {FOR { [DELETE] [,] [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
instruccinSQL [...n] }
|
{FOR { [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
{IF UPDATE (columna) [{AND | OR} UPDATE (columna)] [...n]
| IF (COLUMNS_UPDATED() {operadorNivelBit} mscaraBitsActualizada)
{ operadorComparacin} mscaraBitsColumna [...n]
}
instruccinSQL [...n]
}
}
2001 P.P. Alarcn, A. Yage

Cursores
Sintaxis de SQL-92
DECLARE nombreCursor [INSENSITIVE] [SCROLL] CURSOR
FOR instruccinSELECT
[FOR {READ ONLY | UPDATE [OF listaColumnas [,...n]]}]

Sintaxis extendida de Transact-SQL (SqlServer)


DECLARE nombreCursor CURSOR
[LOCAL | GLOBAL]
[FORWARD_ONLY | SCROLL]
[STATIC | KEYSET | DYNAMIC | FAST_FORWARD]
[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]
[TYPE_WARNING]
FOR instruccinSELECT
[FOR UPDATE [OF nombreColumna [,...n]]]
2001 P.P. Alarcn, A. Yage

4. Arquitectura Cliente/Servidor
? Un

sistema Cliente/Servidor es aquel en el


que dos o ms procesos funcionan de
forma independiente pero de forma
cooperativa.
? En un sistema Cliente/Servidor una
aplicacin pide datos a otra, una vez
realizada la peticin elabora la respuesta y
la devuelve a la aplicacin demandante.

2001 P.P. Alarcn, A. Yage

Arquitectura Cliente/Servidor

Base de
Datos

Disco
Servidor
(SGBD)

SELECT *
FROM CLIENTES
WHERE CIUDAD=MADRID

10

Arquitectura Cliente/Servidor
Servidor
(SGBD)

Cliente

Base de
Datos

Disco
SELECT *
FROM CLIENTES

100.000 filas
Menor Trfico en la Red

SELECT *
FROM CLIENTES
WHERE CIUDAD=MADRID

Menor complejidad en los programas


cliente

10.000 filas

Menor ocupacin de memoria


SELECT *
FROM CLIENTES
WHERE CIUDAD=MADRID
AND EDAD < 18

10 filas

Modelo Cliente/Servidor de dos capas


? Paralelismo

con la implementacin fsica

Ordenador Servidor

Ordenador Cliente

Petici n

Red
Respu

Aplicacin
Servidora

esta

Petici n

Respues

ta

Aplicacin
Cliente

2001 P.P. Alarcn, A. Yage

11

Modelo Cliente/Servidor de tres capas


? Componentes

agrupadas por capas

Interface

Interface

Servicios
de datos

Servicios
del negocio

Servicios
de Usuario

2001 P.P. Alarcn, A. Yage

Anlisis del modelo de servicio


El modelo de servicio representa la forma lgica
de agrupar los componentes que se crean.
? El modelo de servicio es independiente de la
plataforma sobre la que se desarrolle.
? Existen tres tipos de servicios:
?

Servicios de usuario
Servicios de negocio
Servicios de datos

2001 P.P. Alarcn, A. Yage

12

5. Conectividad de Bases de Datos


? ODBC

Open Data Base Connectivity


(Conectividad de Bases de Datos)

Anteriormente se utilizaba Sql embebido,


mediante precompiladores
ODBC permiti que tanto ordenadores
grandes como pequeos utilizasen Sql como
vehculo

2001 P.P. Alarcn, A. Yage

SQL Embebido
Precompilador
(del SGBDR)
Program Acceso;
Var
....
Begin
.....
EXEC SQL DECLARE CURSOR cli
FOR SELECT * FROM CLIENTES
....

Programa
Fuente

Compilador

Programa
Precompilado

Programa
Objeto

End

SGBDR

BD

13

ODBC
Aplicacin

Administrador de Drivers ODBC


Driver Oracle
Consulta:
Clientes

ORACLE

Driver Interbase
Origen de datos:
Albaranes

BD1.GDB

Driver Access (Jet)


Origen de datos:
Productos

BD2.MDB

2001 P.P. Alarcn, A. Yage

ODBC
Protocolo estndar para el acceso a la
informacin de servidores de bases de datos
SQL.
? Hay que instalar controladores de ODBC que
permitan que se realice la conexin a estos
servidores de bases de datos SQL.
?

La arquitectura de la aplicacin/controlador en 32 bits es:

Aplicacin

Administrador de
controladores ODBC

Controlador
ODBC

Fuente de
Datos

2001 P.P. Alarcn, A. Yage

14

ODBC
?

Descripcin de las capas:


Aplicacin: realiza llamadas a la API de ODBC para
enviar las instrucciones ODBC y obtener los
resultados.
Administrador de drivers: realiza dos tareas que
corresponden al modo de funcionamiento oculto y al
modo de funcionamiento mediante interface.
Oculto: realiza la carga de los drivers por peticin de cada
aplicacin.
Interface: realiza el mantenimiento de los drivers y fuentes de
datos.

2001 P.P. Alarcn, A. Yage

ODBC
?

Descripcin de las capas:


Controlador: recibe las llamadas de la aplicacin
hacia las funciones de la API de ODBC y las traduce
al lenguaje nativo de cada servidor.
Fuente de Datos: es la asociacin de un nombre de
fuente con una base de datos del servidor al que se
realiza la conexin. Almacena los elementos
fundamentales de la conexin: ubicacin del servidor,
nombre de la base de datos, nombre de usuario y
contrasea, etc.

2001 P.P. Alarcn, A. Yage

15

ODBC
? Cursores:
Un cursor es un puntero a las filas resultantes de
una consulta sobre una base de datos.
Los cursores deben situarse sobre la primera fila y
deben permitir desplazamientos bidireccionales
sobre el conjunto resultado.
Tipos de cursores:
Estticos: no se actualizan.Reflejan el estado de los datos
en el momento de la consulta. (snapshot)
Dinmicos: refrescan el estado de las memorias locales
cada vez que un usuario realiza una modificacin.
Pseudodinmicos: el refresco de los datos de un registro se
realiza cuando el usuario se sita sobre l.
2001 P.P. Alarcn, A. Yage

ODBC
? Configuracin

de ODBC:

Permite que las aplicaciones se conecten a fuentes


de datos sin importar posteriormente el controlador
que la base de datos lleva asociada.
Se pueden configurar tres tipos de conexiones:
DSN de Usuario:
permite establecer la configuracin de la conexin para el equipo
local y para el usuario actual.

DSN de Sistema:
permite establecer la configuracin de la conexin para el equipo
local y para cualquier usuario de la mquina.

DSN de Archivo:
permite establecer la configuracin de la conexin para cualquier
usuario con el mismo controlador.
2001 P.P. Alarcn, A. Yage

16

JDBC
JDBC es para Java lo que ODBC para
Windows.
? Es un conjunto de primitivas que los drivers
JDBC deben poder entender para acceder a
una base de datos.
? Permiten a cualquier programa Java acceder
a bases de datos. El acceso se hace a travs
de un driver JDBC especfico.
? Es necesario JDBC porque ODBC est
escrito en C y por lo tanto es dependiente de
la mquina.
?

2001 P.P. Alarcn, A. Yage

JDBC
?

Esquema de conectividad:

2001 P.P. Alarcn, A. Yage

17

6. Utilizacin de SQL
? Interaccin

con la BD

? Java
? Visual

Basic

2001 P.P. Alarcn, A. Yage

Interaccin con la BD
?
?

Comandos SQL interactivos en modo textual


Comandos embebidos en lenguajes ad-hoc (4gl o
similares) de los gestores

?
?

pl/sql de Oracle
Transact-sql de SqlServer
i4gl de Informix
...

Comandos de SQL embebido en programas (Pascal, C,


Cobol, Ada, etc.)
Comandos embebidos en lenguajes con objetos de
acceso a datos y conectividad con bases de datos
(ODBC, JDBC)

2001 P.P. Alarcn, A. Yage

18

SQL de modo interactivo


?

Ejemplo
SELECT Nombre, Apellidos, Sueldo
FROM Empleados
WHERE sueldo > 2000

Nombre

Apellidos

Sueldo

Rosa
Pablo

Alvarez
Prez

3000
2500

2001 P.P. Alarcn, A. Yage

SQL embebido en un lenguaje ad-hoc


?

Ejemplo con PL/SQL de Oracle


declare Salario number;
begin
select Sueldo into Salario
from Empleados
where Code = 1234
for update of Sueldo;
if Salario > 500 then
update Empleados set Sueldo = Sueldo * 1.1 where Code = 1234;
else
update Empleados set Sueldo = Sueldo * 1.15 whereCode = 1234;
end if;
commit;
exception
when no_data_found then
insert into Errors values(Empleado no encontrado',sysdate);
end;

2001 P.P. Alarcn, A. Yage

19

SQL embebido en un lenguaje externo


?

Ejemplo con Pascal


Write (categoria:?');
Readln (categoria);
EXEC SQL DECLARE E CURSOR FOR
SELECT Nombre, Apellidos, Sueldo
FROM Empleados
WHERE categoria = :categoria ;
EXEC SQL OPEN E ;
EXEC SQL FETCH E INTO :nombre, :apellidos, :sueldo;
While SQLCODE = 0 do begin
Write (empleado:', nombre, apellidos, aumento?');
Readln (aumento);
EXEC SQL UPDATE Empleados SET Sueldo = Sueldo + :aumento
WHERE CURRENT OF E
EXEC SQL FETCH E INTO :nombre, :apellidos, :sueldo;
End;
EXEC SQL CLOSE CURSOR E;

2001 P.P. Alarcn, A. Yage

SQL embebido en un lenguaje externo


?

Ejemplo con Java

2001 P.P. Alarcn, A. Yage

public void buscarCliente (String codEmp) {


try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conexion = DriverManager.getConnection ("jdbc:odbc:prueba", "yo", "yo");
Statement sentencia = conexion.createStatement();
sql = "SELECT Nombre,Apellidos,Sueldo FROM Cuentas WHERE E# ='" + codEmp + "'";
ResultSet rs = sentencia.executeQuery(sql);
if (rs.next()) {
String nif
= rs.getString(Nombre");
String nombre = rs.getString(" Apellidos ");
String apellidos = rs.getString(Sueldo");
// visualizar los datos
}
else {
System.out.println ("Codigo de empleado no encontrado");
}
rs.close();
}
catch (SQLException ex) {
System.out.println(ex.getMessage); }
}

20

SQL embebido en un lenguaje externo


?

Ejemplo con Visual Basic


Dim miconexion As New ADODB.Connection, micomando As New ADODB.Command
Dim mirecordset As New ADODB.Recordset, msql As String
miconexion.Open "DSN=mibd"
Set micomando.ActiveConnection = miconexion
msql = "SELECT Nombre, Apellidos, Sueldo FROM Empleados " & _
"WHERE E# = " & codEmp
micomando.CommandType = adCmdText
micomando.CommandText = msql
Set mirecordset = micomando.Execute
If Notmirecordset.EOF Then
nombre = mirecordset.Fields(0)
apellidos = mirecordset.Fields(1)
sueldo = mirecordset.Fields(2)
Else
msgbox Empleado no encontrado"
End If
mirecordset.Close
miconexion.Close

2001 P.P. Alarcn, A. Yage

Java
?
?
?
?
?

Driver: Permite conectarse a la BD. Es diferente para cada gestor.


DriverManager: permite gestionar los drivers instalados.
DriverPropertyInfo: proporciona la informacin del driver.
Connection: Representa una conexin a la base de datos.
DatabaseMetadata: da informacin sobre la base de datos a la que
se acceder. (tablas, etc)

?
?

Statement: permite ejecutar sentencias SQL sin parmetros.


PreparedStatement: permite ejecutar sentencias SQL con
parmetros.

CallableStatements: permite ejecutar sentencias SQL con


parmetros de entrada y salida

?
?

Resultset: contiene el conjunto resultado de una consulta


ResultsetMetadata: Obtiene informacin del resultset.

2001 P.P. Alarcn, A. Yage

21

Java
? Conexin

(Objeto Connection)

close()
cierra la conexin de la base de datos

commit() y rollback()
confirma o rechaza los cambios en la base de datos

createStatement()
crea un nuevo objeto de sentencia sql

2001 P.P. Alarcn, A. Yage

Java
? Sentencia

(Objeto Statement)

close()
cierra la conexin con la base de datos

executeQuery(String)
ejecuta la consulta representada en String
devuelve un ResultSet con el resultado

executeUpdate(String)
ejecuta la sentencia representada en String
Update, Insert, Delete o sentencias de definicin
devuelve un entero con el nmero de filas afectadas
2001 P.P. Alarcn, A. Yage

22

Java
?

Resultado (Objeto ResultSet)


close()
cierra la conexin con la base de datos

findColumn(String)
devuelve la posicin que ocupa la columna String

getXxxx(int)
devuelve el valor de la columna que ocupa la columna int en la fila
actual

getXxxx(String)
devuelve el valor de la columna String en la fila actual

next()
devuelve true si hay mas filas, si no hay devuelve false

2001 P.P. Alarcn, A. Yage

Java (ejemplo)
Database mibd = new Database();
mibd.setConnection (new borland.jbc1.dataset.ConnectionDescriptor
(jdbc:odbc:dataset curso, SYSDBA, masterkey, false,
sun.jdbc.odbc.JdbcOdbcDriver));
Statement mSql = mibd.createStatement ();
ResultSet mRs = mSql.ExecuteQuery
(select Nombre, categ FROM conductores);
while (mRs.next()) {
String mNombre = getString(Nombre);
int mCateg = getInt(categ);
}
2001 P.P. Alarcn, A. Yage

23

También podría gustarte