https://es.slideshare.net/SILVA19_PAMELA/jdbc-
80677259
“AÑO DEL BUEN SERVICIO AL
CUIDADANO”
TEMA: JDBC.
CURSO: LABORATORIO
DE PROGRAMACIÓN I.
ESPECIALIDAD: INGENIERÍA DE SISTEMAS Y
TELEMATICA.
NOMBRE Y APELLIDO: GILDA PAMELA SILVA
FLORES.
KARLA FEBRES
PUELLES
DOCENTE: MARCO
AURELIO PORRO CHULLI.
CILCO: V
– A AULA: 501
BAGUA GRANDE– PERÚ
2017
I.
Tema: JDBC
1. Contenido
Capa de Acceso de datos,
creación.
Una
capa de acceso a datos o DAL ( del inglés data access layer ) en los programas
informáticos, es una capa de un programa informático que proporciona acceso
simplificado a los datos almacenados en el almacenamiento persistente de algún
tipo, tal como una entidad - relación de base de datos. Por ejemplo, el DAL podría
devolver una referencia al objeto (en términos de programación orientada a objetos)
completo con sus atributos en lugar de un registro de campos de una tabla de la
base de datos. El DAL esconde esa complejidad del almacén de datos subyacente
del mundo externo. O bien los comandos inserción, eliminación y actualización
podría ser ejecutado en funciones simples como registerUser o loginUser
almacenada dentro de la capa de acceso a datos. Además, los métodos de la
lógica de negocio de una aplicación se pueden asignar a la capa de acceso a
datos. Así, por ejemplo, en vez de hacer una consulta en una base de datos en
busca de todos los usuarios de varias tablas de la aplicación puede llamar a un
solo método de una DAL que abstrae las llamadas bases de datos. Si la capa de
acceso a datos es compatible con varios tipos de bases de datos, la aplicación
se vuelve capaz de utilizar lo que las bases de datos de la CHA pueden hablar.
En cualquier circunstancia, que tiene una capa de acceso de datos proporciona
una ubicación centralizada para todas las llamadas en la base de datos, y por
lo tanto hace que sea más fácil de puerto de la aplicación a otros sistemas de
bases de datos (suponiendo que el 100% de la interacción de base de datos se
hace en la CHA para un dado aplicación). El modelo ORM/active - record es
popular entre los framework para aplicaciones web.
Configuración de conexión
BD con NetBeans.
Java puede
conectarse a múltiples bases de datos, con la que mejor se lleva es con Oracle,
sin embargo en ocasiones puede ser que los que venimos de la web, al tener la
necesidad de hacer una aplicación de escritorio, nos sintamos más acostumbrados
con MySQL.
En primer lugar,
para realizar este ejemplo debemos tener instalado tres cosas en nuestro
sistema:
- La máquina virtual
de Java (Para ejecutar Java, claro está)
- MySQL (en mi caso
yo tengo instalado Xampp que viene con Apache y MySQL, entre otros
servicios
- Netbeans (Con Java
instalado)
MySQL
En primer lugar
vamos a crear una base de datos, a la cual yo llamaré: java_mysql. La mista tendrá
una sola tabla llamada tareas con el siguiente código:
CREATE TABLE tareas (
id_tarea int (10) unsigned not null auto_increment primary key,
Titulo varchar (50) not null,
Descripcion varchar (255) not null,
nivel_de_prioridad tinyint (1) not null
);
Java
Vamos a abrir
Netbeans y vamos a crear un nuevo proyecto, yendo a File -> New Project
-> Java -> Java Application.
Vamos a ponerle un
nombre y vamos a guardarlo en alguna parte de nuestra máquina.
Vamos a borrar
todo lo que esté dentro de la carpeta source (o src)
y dentro vamos a crear dos paquetes, uno al que yo llamaré modelos y
otro al que llamaré servicios.
Ahora, para conectar Java a MySQL tenemos que agregar una librería que se encargará de hacer esa magia. Así que dentro que pulsando botón derecho sobre la carpeta Libraries, vamos a ir a Add Library.
Bueno, ya tenemos todo, no nos
falta nada. Ya podemos empezar a escribir código Java.
Dentro del paquete modelos, vamos a crear una
clase, a la que yo llamaré Tarea.java,
con el siguiente código:
package modelos;
public class Tarea {
private final Integer id_tarea;
private String titulo;
private String descripcion;
private Integer nivel_de_prioridad;
public Tarea() {
this.id_tarea = null;
this.titulo = null;
this.descripcion = null;
this.nivel_de_prioridad = null;
}
public Tarea(Integer id_tarea, String titulo, String descripcion, Integer nivel_de_prioridad) {
this.id_tarea = id_tarea;
this.titulo = titulo;
this.descripcion = descripcion;
this.nivel_de_prioridad = nivel_de_prioridad;
}
public Integer getId_tarea() {
return id_tarea;
}
public String getTitulo() {
return titulo;
}
public String getDescripcion() {
return descripcion;
}
public Integer getNivel_de_prioridad() {
return nivel_de_prioridad;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public void setNivel_de_prioridad(Integer nivel_de_prioridad) {
this.nivel_de_prioridad = nivel_de_prioridad;
}
@Override
public String toString() {
return "Tarea{" + "id_tarea=" + id_tarea + ", titulo=" + titulo + ", descripcion=" + descripcion + ", nivel_de_prioridad=" + nivel_de_prioridad + '}';
}
}
Una clase, nada nuevo, que va a
representar el modelo de una tarea.
Conectando JAVA con
MySQL
Bien, ahora creamos la clase
que va a conectar nuestra aplicación con MySQL, yendo al paquete servicios, vamos a crear una
nueva clase llamada Conexion.java con
el siguiente código:
package servicios;
import java.sql.*;
public class Conexion {
private static Connection cnx = null;
public static Connection obtener() throws SQLException, ClassNotFoundException {
if (cnx == null) {
try {
Class.forName("com.mysql.jdbc.Driver");
cnx = DriverManager.getConnection("jdbc:mysql://localhost/java_mysql", "root", "");
} catch (SQLException ex) {
throw new SQLException(ex);
} catch (ClassNotFoundException ex) {
throw new ClassCastException(ex.getMessage());
}
}
return cnx;
}
public static void cerrar() throws SQLException {
if (cnx != null) {
cnx.close();
}
}
}
Esta clase tendrá un método
estático llamado obtener(),
el cual va a devolvernos una instancia de conexión y de no haber una previa va
crear una:
cnx = DriverManager.getConnection("jdbc:mysql://localhost/java_mysql", "root", "");
Esto
gracias al método getConnection(),
el cuál recibirá como primer parámetro el tipo de base de datos (MySQL) y la
ubicación de la base de datos, en mi caso, como estoy trabajando en un entorno
local, será localhost. El segundo parámetro es el usuario y el tercero la
contraseña.
A
su vez este método puede disparar dos excepciones, SQLException, si surge algún
error, por ejemplo que no se pueda conectar a la base de datos, y ClassNotFoundException, en
caso de que no encuentre la librería.
Y
por último el método, también estático, cerrar(), que como su nombre lo indica, cerrará la
conexión, en caso de que haya alguna abierta.
Consultas
Para
hacer las consultas con la base de datos, dentro del paquete servicios, creamos una clase
con el nombre: Tareas_servicio.java con
el siguiente código:
package servicios;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelos.Tarea;
public class Tareas_servicio {
private final String tabla = "tareas";
public void guardar(Connection conexion, Tarea tarea) throws SQLException{
try{
PreparedStatement consulta;
if(tarea.getId_tarea() == null){
Consulta = conexion.prepareStatement("INSERT INTO " + this.tabla + "(titulo, descripcion, nivel_de_prioridad) VALUES(?, ?, ?)");
consulta.setString(1, tarea.getTitulo());
consulta.setString(2, tarea.getDescripcion());
consulta.setInt(3, tarea.getNivel_de_prioridad());
}else{
consulta = conexion.prepareStatement("UPDATE " + this.tabla + " SET titulo = ?, descripcion = ?, nivel_de_prioridad = ? WHERE id_tarea = ?");
consulta.setString(1, tarea.getTitulo());
consulta.setString(2, tarea.getDescripcion());
consulta.setInt(3, tarea.getNivel_de_prioridad());
consulta.setInt(4, tarea.getId_tarea());
}
consulta.executeUpdate();
}catch(SQLException ex){
throw new SQLException(ex);
}
}
public Tarea recuperarPorId(Connection conexion, int id_tarea) throws SQLException {
Tarea tarea = null;
try{
PreparedStatement consulta = conexion.prepareStatement("SELECT titulo, descripcion, nivel_de_prioridad FROM " + this.tabla + " WHERE id_tarea = ?" );
consulta.setInt(1, id_tarea);
ResultSet resultado = consulta.executeQuery();
while(resultado.next()){
tarea = new Tarea(id_tarea, resultado.getString("titulo"), resultado.getString("descripcion"), resultado.getInt("nivel_de_prioridad"));
}
}catch(SQLException ex){
throw new SQLException(ex);
}
return tarea;
}
public void eliminar(Connection conexion, Tarea tarea) throws SQLException{
try{
PreparedStatement consulta = conexion.prepareStatement("DELETE FROM " + this.tabla + " WHERE id_tarea = ?");
consulta.setInt(1, tarea.getId_tarea());
consulta.executeUpdate();
}catch(SQLException ex){
throw new SQLException(ex);
}
}
public List<Tarea> recuperarTodas(Connection conexion) throws SQLException{
List<Tarea> tareas = new ArrayList<>();
try{
PreparedStatement consulta = conexion.prepareStatement("SELECT id_tarea, titulo, descripcion, nivel_de_prioridad FROM " + this.tabla + " ORDER BY nivel_de_prioridad");
ResultSet resultado = consulta.executeQuery();
while(resultado.next()){
tareas.add(new Tarea(resultado.getInt("id_tarea"), resultado.getString("titulo"), resultado.getString("descripcion"), resultado.getInt("nivel_de_prioridad")));
}
}catch(SQLException ex){
throw new SQLException(ex);
}
return tareas;
}
}
Esta
clase cuenta con los métodos capaces de realizar las distintas operaciones en
una tabla.
El
método guardar (),
que recibirá como parámetro una instancia de conexión y un objeto Tarea. Si el objeto tiene el
valor de id nulo, va a hacer un insert,
de lo contrario un update en
el registro con dicho id.
El
método recuperarPorId (),
recibirá la conexión y un id, y nos devolverá un objeto Tarea correspondiente a ese
id, de lo contrario nos devolverá un valor null, en caso de que no encuentre
ningún registro con ese id.
El
método eliminar () recibirá
un una instancia de conexión y el objeto Tarea que debe eliminar.
Y finalmente recuperar Todas () también
recibirá una instancia de conexión y nos devolverá una lista con todas las
tareas.
Definición de JDBC. Tipos.
Aplicaciones.
En la mayoría de las aplicaciones que nos vamos a
encontrar, aparecerá una base de datos como fuente de información. JDBC nos va
a permitir acceder a bases de datos (BD) desde Java. Con JDBC no es necesario
escribir distintos programas para distintas BD, sino que un único programa
sirve para acceder a BD de distinta naturaleza. Incluso, podemos acceder a más
de una BD de distinta fuente (Oracle, Access, MySql, etc.) en la misma
aplicación. Podemos pensar en JDBC como el puente entre una base de datos y nuestro
programa Java. Un ejemplo sencillo puede ser un applet que muestra
dinámicamente información contenida en una base de datos. El applet utilizará
JDBC para obtener dichos datos.
El esquema a
seguir en un programa que use JDBC es el siguiente:
Uso de JDBC en
aplicaciones java.
Un programa Java que utilice JDBC primero deberá
establecer una conexión con el SGBD. Para realizar dicha conexión haremos uso
de un driver específico para cada SGBD que estemos utilizando. Una vez
establecida la conexión ya podemos interrogar la BD con cualquier comando SQL
(select, update, create, etc.). El resultado de un comando select es un objeto de la
clase ResultSet, que contiene los datos que devuelve la consulta. Disponemos de
métodos en ResultSet para
manejar los datos devueltos. También podemos realizar cualquier operación en
SQL (creación de tablas, gestión de usuarios, etc.).
Para realizar estas operaciones necesitaremos contar
con un SGBD (sistema gestor de bases de datos) además de un driver específico
para poder acceder a este SGBD. Vamos a utilizar dos SGBD: MySQL
(disponible para Windows y Linux, de libre distribución) y PostGres (sólo para
Linux, también de libre distribución).
Tipos de drivers
Existe un estándar establecido que divide los drivers
en cuatro grupos:
·
Tipo 1: Puente JDBC-ODBC. ODBC (Open Database Connectivity) fue creado para
proporcionar una conexión a bases de datos en Microsoft Windows. ODBC permite
acceso a bases de datos desde diferentes lenguajes de programación, tales como
C y Cobol. El puente JDBC-ODBC permite enlazar Java con cualquier base de datos
disponible en ODBC. No se aconseja el uso de este tipo de driver cuando
tengamos que acceder a bases de datos de alto rendimiento, pues las
funcionalidades están limitadas a las que marca ODBC. Cada cliente debe tener
instalado el driver. J2SE incluye este driver en su versión Windows y Solaris.
·
Tipo 2: Parte Java, parte driver nativo. Es una combinación de implementación
Java y API nativo para el acceso a la base de datos. Este tipo de driver es más
rápido que el anterior, pues no se realiza el paso por la capa ODBC. Las
llamadas JDBC se traducen en llamadas específicas del API de la base de datos.
Cada cliente debe tener instalado el driver. Tiene menor rendimiento que los
dos siguientes y no se pueden usar en Internet, ya que necesita el API de forma
local.
·
Tipo 3: Servidor intermediario de acceso a base de datos. Este tipo de driver proporciona una
abstracción de la conexión. El cliente se conecta a los SGBD mediante un
componente servidor intermedio, que actúa como una puerta para múltiples
servidores. La ventaja de este tipo de driver es el nivel de abstracción. El
servidor de aplicaciones WebLogic incorpora este tipo de driver.
·
Tipo 4: Drivers Java. Este es el más directo. La llamada JDBC se traduce directamente
en una llamada de red a la base de datos, sin intermediarios. Proporcionan
mejor rendimiento. La mayoría de SGBD proporcionan drivers de este tipo.
2.
Resumen
Java Database Connectivity,
más conocida por sus siglas JDBC,es una API que permite la
ejecución de operaciones sobre bases de datos desde
el lenguaje de programación Java,
independientemente del sistema operativo donde se ejecute o de la base de datos
a la cual se accede, utilizando el dialecto SQL del modelo de base de datos que
se utilice.
El API JDBC se presenta
como una colección de interfaces Java y
métodos de gestión de manejadores de conexión hacia cada modelo específico de
base de datos. Un manejador de conexiones hacia un modelo de base de datos en
particular es un conjunto de clases que implementan las interfaces Java y
que utilizan los métodos de registro para declarar los tipos de localizadores a
base de datos (URL) que pueden manejar.
Para utilizar una base de datos particular, el usuario ejecuta su programa
junto con la biblioteca de conexión apropiada al modelo de su base de datos, y
accede a ella estableciendo una conexión; para ello provee el localizador a la
base de datos y los parámetros de conexión específicos. A partir de allí puede
realizar cualquier tipo de tarea con la base de datos a la que tenga permiso:
consulta, actualización, creación, modificación y borrado de tablas, ejecución
de procedimientos almacenados en la base de
datos, etc.
3.
Summary
Java Database Connectivity, better known by its abbreviations JDBC, 12 is an API that allows the
execution of operations on databases from the programming language Java, regardless of the
operating system where it is executed or of the database to which it is acceded , using the SQL
dialect of the database model that is used.
The JDBC API is presented as a collection of Java interfaces and methods of managing connection
handlers to each specific database model. A connection handler to a particular database model is
a set of classes that implement Java interfaces and that use the registration methods to declare
the types of database locators (URLs) they can handle. To use a particular database, the user runs
his program together with the appropriate connection library to the model of his database, and
accesses it by establishing a connection; for this it provides the locator to the database and the
connection parameters. From there you can perform any type of task with the database to which
you have permission: query, update, creation, modification and deletion of tables, execution of
stored procedures in the database, etc.
4.
Recomendaciones
Ø
JDBC es usado para enviar comandos SQL hacia una base de datos
relacional, que puede ser Oracle, Infomix, SyBase, etc.
Ø
Nos realizar estas operaciones necesitaría.
Ø
Hemos de tener en cuenta que el tipo del campo en la tabla debe ser
convertible al tipo de datos Java solicitado.
5.
Conclusiones
Utilizar JDBC implica construir y ejecutar
repetidamente sentencias SELECT, INSERT, UPDATE y DELETE.
Por lo tanto:
Creamos mucho código que además estará muy
acoplado a la base de datos que estemos usando.
Tenemos que iterar manualmente sobre las
propiedades de objetos como ResultSet cada vez que consultemos algo en la base
de datos.
A su vez es muy costoso crear
PreparedStatements en cada caso por el mismo motivo de las iteraciones, pero en
este caso sería sobre los POJO’s para Inserts, Updates y Deletes.
Tendríamos que gestionar manualmente el orden
de las inserciones, actualizaciones y borrados para que no hubiese problemas
con la integridad referencial.
6.
Glosario de Términos
RDIF: (Radio Frequency Identification),
Identificación por Radiofrecuencia.
IrLMP: (Infrared Link Management Protocol),
Protocolo de Gestión de Enlace Infrarrojos.
RHCE: (Red Hat Certified Engineer),
Ingeniero Certificado de Red Hat.
AMR: (Audio/Modem Riser), Elevador de
Audio/Módem.
EDI: (Electronic Data Interchange),
Intercambio Electrónico de Datos.
APPN: (Advanced Peer to Peer Networking),
Red Avanzada de Punto a Punto.
7. Bibliografía o Linkografía
https://blogs.msdn.microsoft.com/.../nuestro-nuevo-libro-guia-de-arquitectura-n-capas
https://www.svcommunity.org/forum/net/visual-2005-net-capas/?action=dlattach
www.ehu.eus/mrodriguez/archivos/csharppdf/WebForms/Introduccion_ASPNET.pdf