Está en la página 1de 20

Los procedimientos almacenados son programas o procedimientos (conjunto de

instrucciones) que permiten realizar una determinada tarea, los cuales se


almacenan en una base de datos, se ejecutan a travs de la peticin de una
aplicacin o usuario y se acceden por el nombre dado al momento de crearlos.

Los procedimientos almacenados tienen:

Un nombre.
Una lista de parmetros de entrada y salida (opcional).
Un contenido o bloque de cdigo (lo que hace).

Segn los especialistas de Microsoft Developer Network MSDN (2014) afirman


que:

Un procedimiento almacenado en SQL Server es un grupo de una o ms


instrucciones Transact-SQL o una referencia a un archivo de Microsoft. NET
Framework idioma runtime CLR (Common) mtodo. Los procedimientos
almacenados son similares a los procedimientos de otros lenguajes de
programacin en tanto que pueden:

Aceptar los parmetros de entrada y devolver varios valores en


forma de parmetros de salida al lote o al procedimiento que realiza
la llamada.
Contener instrucciones de programacin que realicen operaciones en
la base de datos. Estos incluyen llamadas a otros procedimientos.
Devolver un valor de estado a un lote o a un procedimiento que
realice una llamada para indicar si la operacin sea realizado
correctamente o se han producido errores, y el motivo de estos.

Asimismo cabe indicar que en Transact-SQL los procedimientos almacenados


pueden devolver valores (numrico entero) o conjuntos de resultados.

Hotek (2009) afirma:

Los procedimientos almacenados son la columna vertebral y la inter


faz de base de datos para prcticamente todas las aplicaciones de SQL
Server en el mundo.
Cada declaracin que usted ejecute en un servidor SQL se puede e
ncapsular dentro de un procedimiento almacenado. En pocas palabras,
un procedimiento almacenado no es ms que un lote de T-SQL al que se le
ha dado un nombre y se almacen dentro de una base de datos. (p.200)

Adems los procedimientos almacenados nos sirven para aprovechar los


recursos del servidor, ahorrar tiempo creando consultas complejas desde el
servidor y ayudan a interactuar con otros objetos, generadores, excepciones,
tablas y vistas. Por lo tanto, es trascendente para todo desarrollador utilizarlos
de manera correcta y saber todo lo que se puede hacer con ellos.
5.1.1. Sintaxis para crear procedimientos almacenados en MSSQL
Server

En MSSQL Server existen 2 formas de crear procedimientos almacenados, los


cuales se muestran a continuacin.

Sintaxis para crear un procedimiento almacenado


segn Transact-SQL
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT | [READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
[;]
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE AS Clause ]

Sintaxis para crear un procedimiento almacenado


segn CLR
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH EXECUTE AS Clause ]
AS { EXTERNAL NAME assembly_name.class_name.method_name }
[;]
Anterior | Siguiente

5.2. Ventajas del uso de procedimientos almacenados

Los procedimientos almacenados proporcionan


ciertas ventajas al momento de desarrollar una aplicacin, segn Microsoft
Developer Network MSDN (2014) y con algunas modificaciones conseguiremos:

Reduccin del trfico de red entre el cliente y el servidor.


Los comandos en un procedimiento se ejecutan como un solo lote de
cdigo. Esto puede reducir significativamente el trfico de red entre el
servidor y el cliente, porque solo la llamada para ejecutar el procedimiento
se enva a travs de la red. Sin la encapsulacin del cdigo proporcionado
por un procedimiento, cada lnea individual de cdigo tendra que cruzar
la red.

Mayor seguridad.

Mltiples usuarios y programas cliente pueden realizar operaciones en


objetos de base subyacentes a travs de un procedimiento, incluso si los
usuarios y los programas no tienen permisos directos sobre los objetos
subyacentes. El procedimiento controla que procesos y actividades se
llevan a cabo y protege los objetos de las base de datos subyacentes. Esto
elimina la necesidad de conceder permisos a nivel individual de cada objeto
y simplifica las capas de seguridad.

Cuando se llama a un procedimiento en la red, slo la llamada para ejecutar


el procedimiento es visible. Por lo tanto, los usuarios malintencionados no
puedan ver la tabla ni los nombres de los objetos de base de datos.

El uso de parmetros de procedimiento ayuda a proteger contra los ataques


de inyeccin SQL. Dado que la entrada de parmetros se trata como un
valor literal y no como cdigo ejecutable, resulta ms difcil para un
atacante insertar un comando en la instruccin Transact-SQL del
procedimiento y comprometer la seguridad.

Los procedimientos pueden ser encriptados, lo que ayuda a ocultar el


cdigo fuente.

Reutilizacin de cdigo.

El cdigo repetitivo para cualquier operacin de base de datos es el


candidato perfecto para la encapsulacin en los procedimientos. Esto
elimina reescrituras innecesarias del mismo cdigo, disminuye la
inconsistencia de cdigo, y permite que el cdigo sea accesado y ejecutado
por cualquier usuario o aplicacin que posea los permisos necesarios.

Mantenimiento ms fcil.

Cuando las aplicaciones cliente llaman a los procedimientos y mantienen


operaciones con las bases de datos en la capa de datos, slo los
procedimientos deben ser actualizados para cualquier cambio en la base de
datos subyacente. El nivel de aplicacin sigue siendo independiente y no
tiene que saber acerca de cualquier cambio en los diseos de base de datos,
relaciones o procesos.

Mejora del rendimiento.


Por defecto, un procedimiento compila la primera vez que se ejecuta y se
crea un plan de ejecucin que se reutiliza para las ejecuciones
posteriores. Desde el procesador de consultas no tiene que crear un nuevo
plan, por lo tanto toma menos tiempo para procesar el procedimiento.

Si ha habido cambios importantes en las tablas o datos a los que se hace


referencia en el procedimiento, el plan precompilado podra hacer que el
procedimiento se ejecutara con mayor lentitud. En este caso, volver a crear
el procedimiento y forzar un nuevo plan de ejecucin puede mejorar el
rendimiento.

5.3. Creacin y modificacin de procedimientos almacenados

Para la creacin y modificacin de los procedimientos almacenados a


continuacin trabajaremos con un ejemplo trabajado por medio de T-SQL.

1.- Creacin de la base de datos


Creamos una base de datos llamada prueba, donde primeramente
evaluamos si existe alguna con ese nombre en nuestro servidor de base
datos, si fuera as lo borramos, luego la creamos y finalmente la dejamos
lista para ser usada.

USE master

IF EXISTS(SELECT NAME FROM SYS.DATABASES WHERE NAME = 'prueba')


BEGIN
DROP DATABASE prueba
END
GO

CREATE DATABASE prueba


GO

USE prueba
GO

2.- Creacin de una tabla


Una vez creada la base de datos crearemos una tabla llamada alumno
donde consideraremos un id por defecto auto incrementable, un campo
nombres y un campo apellidos.

CREATE TABLE alumno(


id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
nombres VARCHAR(30) NOT NULL,
apellidos VARCHAR(50) NOT NULL
)

3.- Creacin de un procedimiento almacenado


Ahora crearemos un procedimiento almacenado que permita insertar los
datos a la tabla alumno

CREATE PROCEDURE agregarAlumno(


@pNombres VARCHAR(50),
@pApellidos VARCHAR(32)
)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO alumno
(nombres, apellidos)
VALUES (@pNombres, @pApellidos);
PRINT 'EL REGISTRO SE HA INGRESADO CORRECTAMENTE';
END

Ejecutemos el procedimiento almacenado creado

exec agregarAlumno 'Marcos','Fernndez Prez'

Una vez ejecutado, el manejador de base de datos MSSQL Server nos


muestra el siguiente mensaje:

EL REGISTRO SE HA INGRESADO CORRECTAMENTE

Para comprobar el registro ingresado hacemos la siguiente consulta:

select * from alumno

4.- Modificacin de un procedimiento almacenado


Qu pasara alguien ingresa un valor nulo por ejemplo:

exec agregarAlumno 'Juan',''

El procedimiento lo aceptara sin enviar ningn error, entonces podemos


modificar el procedimiento de la siguiente manera:

ALTER PROCEDURE agregarAlumno(


@pNombres VARCHAR(50),
@pApellidos VARCHAR(32)
)
AS
IF((@pNombres='') OR (@pApellidos=''))
BEGIN
PRINT 'NO SE PUEDEN INGRESAR VALORES NULOS';
RETURN
END
ELSE
BEGIN
SET NOCOUNT ON;
INSERT INTO alumno(nombres, apellidos)
VALUES (@pNombres, @pApellidos);
PRINT 'EL REGISTRO SE HA INGRESADO CORRECTAMENTE';
END
Donde los BEGIN y END son el inicio y fin del IF, y el RETURN provoca la
salida del procedimiento tras enviar un mensaje a la pantalla del usuario.

Ejecutamos nuevamente:

exec agregarAlumno 'Juan',''

Esto nos da como respuesta un mensaje:

NO SE PUEDEN INGRESAR VALORES NULOS

5.- Borrar un procedimiento almacenado


Para borrar un procedimiento almacenado usamos la sentencia drop
procedure por ejemplo:

DROP PROCEDURE agregarAlumno

5.4. Creacin de procedimientos almacenados para el proyecto del


curso

Este curso por ser de naturaleza terico-prctico, se propone la realizacin de


un proyecto dentro curso, el cual te servir como gua para poder desarrollar
aplicaciones en java para entornos de escritorio y web usado el patrn Modelo
Vista Controlador, desarrollando un solo modelo que luego debe integrarse a la
Vista y Controlador de las aplicaciones de escritorio y web respectivamente,
finalizando con la implementacin e integracin de reportes.

En esta primera parte identificaremos el proyecto indicando:

Descripcin
Alcance
Creacin de la Base de Datos dbtramite en MSSQL Server
Creacin de la Vista v_asignacion
Diagrama de Base de Datos - Modelo Relacional
Implementacin de Procedimientos Almacenados

Proyecto: "Implementacin de un Sistema de Informacin para el mejorar el proceso


de trmite documentario en una institucin"

Descripcin

Este tipo de aplicacin permitira a las organizaciones tener el control de


la ubicacin fsica, actual y pasada de la documentacin que llega, fluye y
se genera dentro de ellas; y en base a estos datos se mostrar el detalle del
proceso que permitir dar seguimiento a los documentos que se est
tramitando, y as poder visualizar las diferentes acciones y respuestas que ha
tenido su documento durante el periodo de tramitacin.

Alcance

Registrar personal
Registrar unidad orgnica
Registrar cargo
Registrar asignacin
Registrar tipo de documento
Registrar/Derivar documento
Recepcionar documento
Proveer documento
5.4.1. Creacin de la Base Datos dbtramite en MSSQL Server

Llamaremos a nuestra base de datos dbtramite para su creacin usaremos T-


SQL, a continuacin se muestra el cdigo:

USE master

IF EXISTS(SELECT NAME FROM SYS.DATABASES WHERE NAME = 'dbtramite')


BEGIN
DROP DATABASE dbtramite
END
GO

CREATE DATABASE dbtramite


GO

USE dbtramite
GO

Una vez creada la base de datos, crearemos sus tablas.

CREATE TABLE personal(


per_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
per_dni CHAR(8) NOT NULL,
per_nombres VARCHAR(50) NOT NULL,
per_iniciales VARCHAR(5) NOT NULL,
per_login VARCHAR(15) NOT NULL,
per_clave VARCHAR(15) NOT NULL,
per_estado BIT NOT NULL
)
GO

CREATE TABLE unidad_organica(


uni_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
uni_nombre VARCHAR(150) NOT NULL,
uni_abreviatura VARCHAR(10) NOT NULL,
uni_estado BIT NOT NULL
)
GO

CREATE TABLE cargo(


car_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
car_nombre VARCHAR(100) NOT NULL,
uni_estado BIT NOT NULL
)
GO

CREATE TABLE asignacion(


asg_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
asg_nivel VARCHAR(50) NOT NULL,
asg_estado BIT NOT NULL,
per_id INT NOT NULL,
uni_id INT NOT NULL,
car_id INT NOT NULL,
CONSTRAINT FK_ASG_personal FOREIGN KEY (per_id)
REFERENCES personal(per_id)
ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT FK_ASG_unidad_organica FOREIGN KEY (uni_id)
REFERENCES unidad_organica(uni_id)
ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT FK_ASG_cargo FOREIGN KEY (car_id)
REFERENCES cargo(car_id)
ON DELETE NO ACTION ON UPDATE NO ACTION
)
GO

CREATE TABLE tipo_documento(


tip_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
tip_nombre VARCHAR(50) NOT NULL,
tip_estado BIT NOT NULL
)
GO

CREATE TABLE documento(


doc_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
doc_numero INT NOT NULL,
doc_sigla VARCHAR(100) NOT NULL,
doc_prioridad VARCHAR(7) NOT NULL,
doc_fecha DATETIME NOT NULL,
doc_asunto VARCHAR(250) NOT NULL,
doc_folios INT NOT NULL,
doc_interesado VARCHAR(100) NOT NULL,
doc_cargo VARCHAR(50) NOT NULL,
tip_id INT NOT NULL,
CONSTRAINT FK_DOCUMENTO_tipo FOREIGN KEY (tip_id)
REFERENCES tipo_documento(tip_id)
ON DELETE NO ACTION ON UPDATE NO ACTION
)
GO

CREATE TABLE movimiento(


mov_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
mov_fecha_reg DATETIME NOT NULL,
mov_operacion VARCHAR(20) NOT NULL,
mov_proveido TEXT NULL,
mov_estado BIT NOT NULL,
asg_id INT NOT NULL,
doc_id INT NOT NULL,
CONSTRAINT FK_MOVIMIENTO_asignacion FOREIGN KEY (asg_id)
REFERENCES asignacion(asg_id)
ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT FK_MOVIMIENTO_documento FOREIGN KEY (doc_id)
REFERENCES documento(doc_id)
ON DELETE NO ACTION ON UPDATE NO ACTION
)
GO

CREATE TABLE incidencia(


inc_id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
inc_forma VARCHAR(10) NOT NULL,
inc_persona VARCHAR(50) NOT NULL,
inc_unidad_org VARCHAR(150) NULL,
inc_cargo VARCHAR(100),
inc_estado INT NOT NULL,
mov_id INT NOT NULL,
CONSTRAINT FK_INCIDENCIA_movimiento FOREIGN KEY (mov_id)
REFERENCES movimiento(mov_id)
ON DELETE NO ACTION ON UPDATE NO ACTION
)
GO

5.4.2. Creacin de la Vista v_asignacion

En este proyecto el usuario que va intercambiar la informacin y hacer los


movimientos necesarios para un proceso de trmite documentario est formado
por la asignacin de un personal a una determinada unidad orgnica con su
respectivo cargo, por ejemplo:

Personal: Juan Prez


Unidad Orgnica: Gerencia de Ventas
Cargo: Gerente

Por lo tanto, la unin de estas entidades forman una asignacin y cada


asignacin va a representar a un usuario con su respectivo nivel como se
visualiza en la tabla creada llamada asignacin.

Finalmente, luego de haber creado la base de datos con sus respectivas tablas
vamos a crear una vista llamada vista asignacin, la cual nos a permitir obtener
todos los datos necesarios, tanto para el logueo al sistema, como para
mostrarlos en la pantalla del sistema permitindonos identificar con cual
usuario se ha accedido al sistema.

USE dbtramite
GO

CREATE VIEW v_asignacion


AS
SELECT asg_id, per_nombres AS personal, uni_nombre, car_nombre,
CASE asg_nivel WHEN 'U' THEN 'Usuario' ELSE 'Administrador' END AS
asg_nivel,
asg_estado, per_login, per_clave, uni_abreviatura, per_iniciales
FROM asignacion a
INNER JOIN personal p ON a.per_id=p.per_id
INNER JOIN unidad_organica u ON a.uni_id=u.uni_id
INNER JOIN cargo c ON a.car_id=c.car_id
GO
5.4.2. Diagrama de Base de Datos Modelo Relacional

6.1. Qu es Java DataBase Connectivity - JDBC?

JDBC es una API estndar para la


conectividad de base de datos la cual es independiente entre aplicaciones Java
y una amplia gama de bases de datos relacionales (RDBMS). Siendo est divida
en:
API, la cual est formada por un conjunto de las interfaces independientes del
(RDBMS).
Driver: es la implementacin de las interfaces API para un RDBMS especfico
(por ejemplo, MSSQL Server, Oracle, DB2, MySQL, etc).

Pero a pesar de que JDBC es independiente del RDBMS, los dialectos SQL
(sintaxis) generalmente no lo son.

El paquete java.sql contiene el conjunto de interfaces que define el API JDBC.

El API JDBC permite realizar bsicamente 3 cosas:

Establecer una conexin a uno o ms servidores de base de datos desde Java.


Ejecutar comandos SQL a travs de dicha conexin.
Procesar los resultados.

Segn Flrez (2012):

El JDBC est diseado para ser independiente de la plataforma e incluso de


la base de datos, de esta manera, la aplicacin se comunica con el JDBC y
este con la base de datos. Para manipular la base de datos desde la
aplicacin en Java es necesario utilizar el lenguaje SQL (Structured Query
Language). El JDBC es un componente embebido en un archivo jar . Este
archivo debe incluirse en el build path del proyecto para poder ser utilizado
por la aplicacin. (p.289)

6.2. Tipos de drivers

Los drivers son aquellos que nos permiten conectarnos con una base de datos
determinada. Existen cuatro tipos de drivers JDBC, cada tipo muestra una
filosofa de trabajo diferente, a continuacin se detalla cada uno de ellos.

Type1: JDBC-ODBC Bridge


Type2: Native-API partly-Java driver
Type3: JDBC-Net pure Java driver
Type4: Native-protocol pure Java driver

Estos se explican mejor en el siguiente grfico:


6.2.1. Type1: JDBC-ODBC Bridge

Este tipo de driver permite al programador acceder a fuentes de datos ODBC


existentes mediante JDBC.

Segn Gmez (2012):

El puente JDBC ODBC permite acceder cualquier base de datos, dado que
los controladores ODBC de la base de datos se encuentran disponibles. Se
requiere instalacin del cliente ODBC para utilizar el controlador y no se
tiene como una buena solucin para aplicaciones web. (p.117)

Por lo tanto cabe sealar que al utilizar este tipo de driver es necesario que en
cada mquina cliente debe existir una configuracin previa; es decir,
deberemos definir la fuente de datos utilizando el gestor de drivers ODBC que
se encuentra en el Panel de Control de Windows.

Resumiendo diramos que para implementar este tipo de driver debemos tener
en cuenta que:

depende del soporte de ODBC.


no es portable.
6.2.2. Type2: Native-API partly-Java driver

Gmez (2012) afirma que: Es similar al anterior, con la diferencia que no


realiza el proceso de traduccin mediante el puente controlador. Ofrecen un
mejor rendimiento que el controlador anterior y puede afirmarse que utiliza
API nativa especfica para cada base de datos (p.117).
Por lo tanto al ser similares a los drivers de tipo1, se requiere una configuracin
en la mquina cliente. Adems no se pueden utilizar dentro de aplicaciones
web porque poseen cdigo nativo.

En resumen diramos que este tipo de driver:

Requiere de la librera nativa de la base de datos.


No es portable.

6.2.3. Type3: JDBC-Net pure Java driver

Este tipo de driver traduce las llamadas JDBC


a un protocolo independiente del servidor de base de datos, el cual ser
traducido por un servidor de aplicaciones (Middleware) para comunicarse con
un servidor de base de datos especfico.

Segn Gmez (2012):

Constituye un Back-end que accede al servidor de la base de datos. Este


controlador se basa en servidor, por lo que no es necesario el controlador
en el cliente. Adems est escrito totalmente en Java, lo que lo hace
portable y adecuado para aplicaciones web. Su nica desventaja quiz es
que se requiere un servidor de aplicaciones para la instalacin y
mantenimiento del controlador. (p.117)

Por lo tanto con este tipo de drivers no se necesita ninguna configuracin


especial en el cliente, porque permiten el dialogo con un intermediario
(Middleware) el cual es encargado de dialogar a su vez con las bases de datos,
y este puede estar escrito en cualquier lenguaje de programacin, ya que se
ejecutar en el servidor.
Resumiendo exponemos que este tipo de driver:

Depende del servidor Middleware


El driver es portable, pero el servidor middleware podra no ser.
6.2.4. Type4: Native-protocol pure Java driver

Gmez (2012) afirma: Son completamente escritos en Java, con lo que se logra
la independencia de la plataforma y la eliminacin de problemas de
implementacin y administracin. Son adecuados para aplicaciones web. Se
necesita un controlador para cada base de datos (p.117).

Por lo cual concluimos que esta clase de driver convierte directamente las
llamadas en JDBC al protocolo usado por el servidor de base de datos.
Permitiendo una comunicacin directa entre la mquina cliente y el servidor en
el que se encuentra el servidor de base de datos.

En resumen este tipo de driver:

Depende del servidor Middleware


Es Portable.
6.4. Forma de Uso

Para mostrar la forma de uso de JDBC en aplicaciones java te mostramos el


siguiente grfico.

Segn el grafico podemos ver que en una aplicacin java se puede establecer
conexiones a partir de 2 formas:

Primera forma a travs de DriverManager, la cual es una clase que se encarga


de crear objetos de tipo Connection a partir de la carga previa de un driver
JDBC.

Segunda forma a travs de DataSource, la cual es una fuente de datos que


reside regularmente en un servidor de aplicaciones y acta como middleware,
conteniendo la configuracin de las fuentes de datos de las cuales se crear un
objeto de tipo Connection.

Una vez que establecemos la conexin mediante cualquiera de las 2 formas


mencionadas requerimos de la clase Connection, la cual representa una
conexin a la base de datos, la cual es creada por va directa (DriverManager)
o utilizando DataSource y es la ms importante y encargada de la ejecutar
sentencias utilizado el driver JDBC, manejo de transacciones, niveles de
aislamiento, etc.

Finalmente el Driver JDBC, es el que nos conecta a la base de datos y es


proporcionado por el fabricante de la base de datos.
6.5.1. Cargar / Registrar el Driver JDBC

Para cargar y registrar el driver se manipula a nivel de memoria la


clase java.sql.DriverManager: siendo esta la capa gestora de JDBC, trabajando
entre el usuario y el controlador (driver). Esta clase se encarga de cargar y
seleccionar el driver adecuado para realizar la conexin con una base de datos
determinada. Utilizaremos el mtodo esttico forName() contenido en la clase
Java.lang, para realizar la respectiva carga y registro del driver.

Su sintaxis general es:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); para cargar el


driver de MSSQL Server.
Class.forName("com.sybase.jdbc2.jdbc.SybDriver"); para cargar el driver de
Sybase.
Class.forName("oracle.jdbc.driver.OracleDriver"); para cargar el driver de
Oracle.
Class.forName("com.mysql.jdbc.Driver"); para cargar el driver de MySQL.
Class.forName("org.postgresql.Driver"); para cargar el driver de PostgreSQL.
6.5.2. Obtener la Conexin

Para obtener la conexin debemos obtener una instancia de tipo


java.sql.Connection mediante el DriverManager, donde esta crea una conexin
con una base de datos especfica. Asimismo cabe indicar que:

una conexin con la base de datos se establece usando un driver ya


registrado.
Para conectarnos a la base de datos una vez cargado el driver, utilizaremos el
mtodo getConnection.
Cuando se invoca el mtodo getConnection, el DriverManager intenta localizar
un driver apropiado entre los que se hayan cargado previamente y los que se
puedan cargar usando el mismo classloader que la aplicacin actual.
El mtodo getConnection define una URL que indicar la ubicacin de la base
de datos.

Por lo tanto para realizar una conexin se requiere de 3 parmetros: URL,


usuario y clave.

En la que una URL de JDBC facilita una forma de identificar una base de datos
de forma que el driver apropiado la reconozca y establezca una conexin con
ella. Esta tiene 3 partes separadas por dos puntos.

Su sintaxis general es:

jdbc:subprotocolo:<subnombre>

Dnde:

jdbc es el protocolo, el cual en una URL JDBC es siempre jdbc.


<subprotocolo>, es el que indica el tipo de base de datos especfico,
usualmente es el driver o el mecanismo de conectividad de la base de datos.
<subnombre>, siendo el localizador que permite referenciar de forma nica
una BD teniendo en su estructura 3 puntos: 1) el host 2) el puerto(opcional) y
3) el nombre de la base de datos.

La sintaxis para implementar una URL JDBC para MSSQL Server por ejemplo
sera:

Para conectarnos a una base de datos la interfaz java.sql.Connection tiene 3


formas de implementar el mtodo getConnection:

public static Connection getConnection(String url)


public static Connection getConnection(String url, String user, String password)
public static Connection getConnection(String url, Properties info)

Adems se indica que cualquiera de estos mtodos puede lanzar la excepcin


SQLException.

Por lo tanto para obtener una conexin de MSSQL utilizando en segundo mtodo
mostrado Server seria:

6.5.3. Crear el Comando

Una vez establecida la conexin con la base de datos usando el mtodo


getConnection de DriverManager, ahora podemos crear comandos mediante
sentencias SQL, para lo cual en el API JDBC existen 3 tipos de interfaces que
hacen este trabajo. Existe una jerarqua de estos tres interfaces del paquete
java.sql lo cual podemos ver en la siguiente imagen:

Como podemos observar PreparedStatement hereda de la interfaz Statement


y CallableStatement de la interfaz PreparedStatement, donde cada tipo de
sentencia est especializada para enviar un tipo especfico de sentencia SQL.

Statement
Esta interfaz es utilizada para la ejecucin de sentencias SQL estticas en
tiempo de ejecucin, es decir para ejecutar una sentencia SQL simple sin
parmetros. Esta interfaz ofrece mtodos bsicos para ejecutar sentencias y
devolver los resultados.

Un objeto Statement se crea con el mtodo createStatement de Connection


como se muestra en el siguiente ejemplo. Para verlo presione el botn
Pulse aqu

PreparedStatement

Esta interfaz es utilizada para la ejecucin de sentencias SQL, se precompilan


(ms rpidas) y aceptan parmetros de entrada en tiempo de ejecucin; es
decir, ejecutan sentencias SQL precompiladas con o sin parmetros de entrada,
se suele utilizar tambin para ejecutar sentencias SQL de uso frecuente. Esta
interfaz aade mtodos para ejecutar sentencias que poseen parmetros de
entrada.

En esta interfaz en lugar de datos, se utiliza el signo de interrogacin ? como


marcador, los datos se agregan despus de la compilacin. Los marcadores ?
deben ser sustituidos por datos concretos antes de ejecutar los
PreparedStatements.

De existir parmetros, usamos los mtodos setTipoDato(x,y) para darles


valor(x identifica al parmetro, y al valor que toma).

Un objeto PreparedStatement se crea con el mtodo PreparedStatement de


Connection como en el siguiente fragmento de cdigo. Para verlo presione el
botn Pulse aqu

CallableStatement

Esta interfaz es utilizada para la ejecucin de procedimientos almacenados en


la base de datos; es decir, ejecutar una llamada a un procedimiento
almacenado de una base de datos, que puede tener parmetros de entrada,
de salida y entrada/salida. Esta interfaz aade mtodos para tratar con
parmetros de salida.

La sintaxis general para realizar la llamada a un procedimiento almacenado es


la siguiente:

{call nombre_del_procedimiento(?,?,...)}

Si el procedimiento devuelve un parmetro de resultado:

{?=call nombre_del_procedimiento (?.?...) }

Si el procedimiento no tiene ningn tipo de parmetros la sintaxis seria:


{call nombre_del_procedimiento}

Por lo tanto un objeto CallabeStatement se crea con el mtodo


CallabeStatement de Connection como en el siguiente fragmento de
cdigo.Para verlo presione el botn Pulse aqu

6.5.4. Ejecutar el Comando

Una vez creado el comando SQL con cualquiera de los tipos de interfaces
estudiados, en esta parte vamos a ver como ejecutarlos, para ello existen 3
tipos de mtodos que se encargan de dicha accin: executeQuery(String
sql), executeUpdate(String sql) y execute(String sql)

executeQuery(String sql)

Este tipo de ejecucin realiza lo siguiente:

Ejecucin de consultas: SELECT


Devuelve un objeto ResultSet

Para este tipo de ejecucin es necesario hacer el tratamiento de los


resultados mediante la interfaz ResultSet el cual lo explicaremos ms
adelante.

Por ejemplo para ver su implementacin presione el botn Pulse aqu

executeUpdate(String sql)

Este tipo de ejecucin realiza lo siguiente:

Modificaciones en la BD: INSERT, UPDATE, DELETE


Devuelve el nmero de columnas afectadas

Por ejemplo para ver su implementacin presione el botn Pulse aqu

6.5.4.1. Procesar los resultados

Para procesar los resultados se requiere de la interfaz ResultSet.

ResultSet.
Gmez (2012) afirma que:

Mediante ResultSet se obtienen los resultados de la ejecucin de una


consulta usando Statement. Se asocia con la sentencia Select de SQL dado
que es la nica que produce un resultado (registros que resultan de un
Select). Adems se consideran los procedimientos almacenados que
tambin devuelven datos como resultados. (p.122)

Por lo que podemos ver, un objeto ResultSet es similar a un arreglo de dos


dimensiones; es decir, contiene todos los registros (filas) que satisfacen las
condiciones impuestas en una sentencia SQL y proporciona acceso a los datos
en dichos registros a travs de un conjunto de mtodos get que permiten
acceder a los diferentes campos o atributos (columnas) del registro actual.

Dentro de un ResultSet existen ciertos mtodos de inters:

next(): para iterar por las filas del ResulSet (la primera llamada nos posiciona
en la primera fila de resultados).
first(): para ir al principio del ResulSet.
getXXX(v): devuelve el valor, dentro de una fila, especificado por v (ndice o
nombre de columna).

Adems el ResultSet tiene mtodos de acceso en lectura getInt(),


getLong(), getString() etc., para todos los tipos de datos java que equivalen a
los tipos SQL, se requiere especificar el nombre o nmero de orden (empezando
en 1, 2, 3, etc.) de la columna que se va a leer.

Por lo expuesto la forma de trabajar un resultado sera como el fragmento de


cdigo que se muestra a continuacin:

Connection con = DriverManager.getConnection(url);


String query = "SELECT * FROM nombreTabla";
Statement stmt = con.createStatement(query);
ResultSet rs = stmt.executeQuery();

while(rs.next()){
System.out.println("Datos "+rs.getString("nombreCampo01")
+", Dato2: "+rs.getString("nombreCampo02"));
}

6.5.5. Liberar Recursos

Para liberar los recursos las clases e interfaces ( Connection, Statement,


PreparedStatement, CallableStatement y ResultSet) proveen el
mtodo close(), que activa la realizacin de la instancia especfica, que liberan
todos los recursos JDBC que se ejecutan sobre el servidor de datos.

Cuando se invoca el mtodo close() de un Statement, los ResultSet asociados


son cerrados automticamente. Pero hay que tener en cuenta que la invocacin
al mtodo close() de Connection, puede provocar un SQLException si esta ya
est cerrada.
Por lo tanto, debera ir al final de la ejecucin del comando y su sintaxis
sera:

stm.close(); // Comando Statement


conn.close(); // conn es una conexin vlida

6.6. Conexin a MSSQL Server

Para conectarnos a MSSQL Server debemos tener en cuenta previamente lo


siguiente:

Conseguir en driver (sqljdbc4.jar) que permita conectarnos con este tipo de


base de datos, este estar como recurso en el aula uss virtual.
Configurar el servidor de base datos MSSQL server de manera que pueda aceptar
conexiones cliente/servidor.
Crear un usuario con sus respectivos permisos, para este caso vamos a trabajar
con el usuario sa.
Tener instalado NetBenas para crear un proyecto que permita realizar la
conexin.

Una vez considerado los puntos previos, a continuacin te explicaremos paso a


paso como realizar esta conexin.