viernes, 16 de septiembre de 2016

JDBC





DESARROLLO DE SOFTWARE I
I.             TEMA : JDBC
1.    Contenido

Ø  Capa de Acceso de datos, creación

La mayoría de los proyectos actuales necesitan guardar o consultar datos de una base de datos relacional, de esta manera se puede persistir la información de sus usuarios y del negocio que implementan pudiendo acceder a ella en cualquier momento.
Para conectarse a las BD las aplicaciones utilizan por lo general drivers, que no son más que componente que permiten realizar una conexión amigable con la base de datos de un tipo específico. Algunos de estos tipos pueden ser MSSQL, MySQL, Oracle, PostgreSQL, etc.
Otro elemento importante a tener en cuenta es que para realizar operaciones sobre los datos se necesita de un lenguaje de consultas que permita a los desarrolladores trabajar con las bases de datos, y en este punto contamos con SQL.

Aquellos desarrolladores con poca formación o que desconozcan los patrones de diseño existentes puede ser que comentan el error de mezclar el código de la aplicación que desarrolla con el código del acceso a los datos y esto puede traer muchos problemas a corto, mediano y largo plazo. Es por esta razón que se han propuesto arquitecturas y patrones de diseño que especifican cual debe ser la forma de diseñar una aplicación y como una aplicación debe acceder a sus datos. Esto se muestra en  las siguientes dos imágenes a manera de ejemplo.






JAVA como lenguaje primero hizo uso de JDBC para el acceso a las BD. Con esta tecnología se puede:
  1. Establecer una conexión con la BD, especificando un driver y los parámetros para autenticarse en la BD.
  2. Usar la conexión establecida para realizar operaciones sobre la BD (seleccionar datos, insertar, modificar, eliminar, etc.).
  3. Procesar los resultados devueltos por las operaciones anteriores

Ø  Creación de JDBC

JDBC existe desde 1996, y fue incluido desde la versión 1.1 de Java Development Kit por JavaSoft, aunque también se hizo disponible para usarse con JDK 1.02. El problema de usar JDBC con el JDK 1.02 es que los usuarios comunes tenían que agregar a su máquina virtual de Java las clases que implementan JDBC, lo cual era muy engorroso y difícil. Es por esto que desde la versión de JDK 1.1, JDBC viene incluido como el paquete java.sql.
Java en un principio era visto como un lenguaje para poner animaciones en Internet, la información que presentaba no era persistente, así que no era apto para aplicaciones de negocios o industriales, que requerían la capacidad de acceder a información almacenada en Sistemas Gestionadores de Bases de Datos (DBMS).
 Era además necesario crear una forma sencilla de acceder a bases de datos usando Java, pues de otra manera se dejaría al desarrollador con la tarea de implementar llamadas de bajo nivel al DBMS.
En ese entonces Java era un lenguaje que prometía independencia de plataformas, lo cual lo hacía un ambiente muy atractivo para crear todo tipo de aplicaciones, y el acceso a Base de Datos se convertía cada vez más en una necesidad que un lujo.
 La gente en JavaSoft se preguntó cómo atraer a los programadores y a las empresas a invertir su dinero y su tiempo en JDBC. Es por esto que decidieron crear ventajas competitivas en su producto, mejorando cada vez más la interface de JDBC para que:
1. Los programadores pudieran sentirse como si usaran solamente Java, permitiéndoles una forma sencilla de uso del DBMS.
2. Los programadores se sintieran en contacto directo con el DBMS y no con un socket o un proceso en cualquier máquina.
 3. La comunicación con la base de datos fuera fácil de programar. Esto es, que las empresas que quisieran hacer controladores JDBC para comunicarse con sus productos lo pudieran hacer en forma sencilla.
4. Fuese flexible, para aceptar configuraciones diferentes de conectividad. Ósea, que la misma aplicación del desarrollador pudiese acceder a varios DBMS a la vez, tal vez hasta en varios hilos simultáneos.

Ø  Configuración de conexión BD con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans.

Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.
*   Primero que nada necesitas tener un servidor MySQL instalado en tu equipo o en su defecto en la máquina que actuará como servidor de bases de datos. Recuerda que MySQL es gratuito y puedes obtenerlo desde aquí.El proceso de instalación es algo en lo que no entraré en detalle, para cualquier duda puedes consultar la documentación oficial que se encuentra en su sitio web.
*   Asimismo, debes de tener el NetBeans instalado, de preferencia su última versión estable (al momento de esta publicación es la 5.5.1) que viene con el Java Development Kit (JDK) 1.6, lo anterior puedes obtenerlo desde aquí.
  • Una vez que tengas ambas herramientas instaladas necesitaras el driver o conector a la base de datos de MySQL que puedes obtener desde aquí.
Copiar lo necesario         

Una vez que tengas el NetBeans y el MySQL Server instalado lo que vas a necesitar es copiar el driver que descargaste, en mi caso el mysql-connector-java-3.1.11-bin.jar dentro de la carpeta del JDK, en mi caso es la siguiente ruta:

C:\Archivos de programa\Java\jdk1.6.0_01\jre\lib\ext       



*NOTA: Debes tener el conector dentro de la carpeta anterior antes de ejecutar el NetBeans, en caso de que esté abierto ciérralo y vuélvelo a abrir.












Ya que lo hayas copiado ahora sí abre el NetBeans y espera a que cargue.

Configurar NetBeans:     

Una vez que hayas abierto el NetBeans localiza la sección de Runtime o Tiempo de ejecución que se localiza en el lado izquierdo de la pantalla, como se muestra a continuación:




Al expandir la sección de Databases Bases de datos debe de aparecer el MySQL (Connector/J driver), en caso contrario debes de agregarlo manualmente como se describe a continuación:

1. Da un clic derecho sobre Drivers y selecciona New Driver.





1.    
.         2.En la ventana que aparece da clic en el botón de Add Agregar y busca el archivo .jar que descargaste anteriormente, el mismo que copiaste dentro de la carpeta del JDK.   
      
      3. Una vez hecho lo anterior da clic en el botón de Ok Aceptar.
Cuando realices los pasos anteriores debe de aparecer un elemento nuevo en la sección de Drivers dentro de Databases de nombre MySQL (Connector/J driver).


Ø  Definición de JDBC. Tipos. Aplicaciones

¿Qué es JDBC?
JDBC es usado para enviar comandos SQL hacia una base de datos relacional, que puede ser Oracle, Infomix, SyBase, etc.
JDBC es el API para la ejecución de sentencias SQL. (Como punto de interés JDBC es una marca registrada y no un acrónimo, no obstante a menudo es conocido como “Java Database Connectivity”). Consiste en un conjunto de clases e interfaces escritas en el lenguaje de programación Java. JDBC suministra un API estándar para los desarrolladores y hace posible escribir aplicaciones de base de datos usando un API puro Java.
Usando JDBC es fácil enviar sentencias SQL virtualmente a cualquier sistema de base de datos. En otras palabras, con el API JDBC, no es necesario escribir un programa que acceda a una base de datos Sybase, otro para acceder a Oracle y otro para acceder a Informix. Un único programa escrito usando el API JDBC y el programa será capaz de enviar sentencias SQL a la base de datos apropiada. Y, con una aplicación escrita en el lenguaje de programación Java, tampoco es necesario escribir diferentes aplicaciones para ejecutar en diferentes plataformas. La combinación de Java y JDBC permite al programador escribir una sola vez y ejecutarlo en cualquier entorno.
Java, siendo robusto, seguro, fácil de usar, fácil de entender, y descargable automáticamente desde la red, es un lenguaje base excelente para aplicaciones de base de datos.
JDBC expande las posibilidades de Java. Por ejemplo, con Java y JDBC API, es posible publicar una página web que contenga un applet que usa información obtenida de una base de datos remota. O una empresa puede usar JDBC para conectar a todos sus empleados (incluso si usan un conglomerado de máquinas Windows, Macintosh y UNIX) a una base de datos interna vía intranet. Con cada vez más y más programadores desarrollando en lenguaje Java, la necesidad de acceso fácil a base de datos desde Java continúa creciendo.

Tipos de drivers
Un driver JDBC puede pertenecer a una de cuatro categorías diferentes en cuanto a la forma de operar.

Puente JDBC-ODBC
 La primera categoría de drivers es la utilizada por Sun inicialmente para popularizar JDBC y consiste en aprovechar todo lo existente, estableciendo un puente entre JDBC y ODBC. Este driver convierte todas las llamadas JDBC a llamadas ODBC y realiza la conversión correspondiente de los resultados. 




La ventaja de este driver, que se proporciona con el JDK, es que Java dispone de acceso inmediato a todas las fuentes posibles de bases de datos y no hay que hacer ninguna configuración adicional aparte de la ya existente. No obstante, tiene dos desventajas muy importantes; por un lado, la mayoría de los drivers ODBC a su vez convierten sus llamadas a llamadas a una librería nativa del fabricante DBMS, con lo cual la lentitud del driver JDBC-ODBC puede ser exasperante, al llevar dos capas adicionales que no añaden funcionalidad alguna; y por otra parte, el puente JDBC-ODBC requiere una instalación ODBC ya existente y configurada.

Java/Binario
 Este driver se salta la capa ODBC y habla directamente con la librería nativa del fabricante del sistema DBMS (como pudiera ser DB-Library para Microsoft SQL Server o CT-Lib para Sybase SQL Server). Este driver es un driver 100% Java pero aun así necesita la existencia de un código binario (la librería DBMS) en la máquina del cliente, con las limitaciones y problemas que esto implica





100% Java/Protocolo nativo
 Es un driver realizado completamente en Java que se comunica con el servidor DBMS utilizando el protocolo de red nativo del servidor. De esta forma, el driver no necesita intermediarios para hablar con el servidor y convierte todas las peticiones JDBC en peticiones de red contra el servidor. La ventaja de este tipo de driver es que es una solución 100% Java y, por lo tanto, independiente de la máquina en la que se va a ejecutar el programa. 





Igualmente, dependiendo de la forma en que esté programado el driver, puede no necesitar ninguna clase de configuración por parte del usuario.
La única desventaja de este tipo de drivers es que el cliente está ligado a un servidor DBMS concreto, ya que el protocolo de red que utiliza MS SQL Server por ejemplo no tiene nada que ver con el utilizado por DB2, PostGres u Oracle. La mayoría de los 12 fabricantes de bases de datos han incorporado a sus propios drivers JDBC del segundo o tercer tipo, con la ventaja de que no suponen un coste adicional.

100% Java/Protocolo independiente




Esta es la opción más flexible, se trata de un driver 100% Java / Protocolo independiente, que requiere la presencia de un intermediario en el servidor. En este caso, el driver JDBC hace las peticiones de datos al intermediario en un protocolo de red independiente del servidor DBMS. El intermediario a su vez, que está ubicado en el lado del servidor, convierte las peticiones JDBC en peticiones nativas del sistema DBMS. La ventaja de este método es inmediata: el programa que se ejecuta en el cliente, y aparte de las ventajas de los drivers 100% Java, también presenta la independencia respecto al sistema de bases de datos que se encuentra en el servidor.

Aplicaciones
Las aplicaciones de ejemplo del Controlador JDBC de Microsoft para SQL Server muestran varias características del controlador JDBC. Además, describen las prácticas recomendadas de programación que puede aplicar al usar el controlador JDBC con una base de datos de SQL Server.
Todas las aplicaciones de ejemplo se incluyen en archivos de código *.java que se pueden compilar y ejecutar en el equipo local, y se encuentran en varias subcarpetas de la siguiente ubicación:

<directorio de instalación de> \sqljdbc_ <versión> \ <idioma> \muestras

En los temas de esta sección se describe cómo configurar y ejecutar las aplicaciones de ejemplo, y se incluye una descripción de lo que demuestran.






Ø  Uso de JDBC en aplicaciones Java

Uso de controladores de las BD

*      Clase DriverManager
• Permite establecer y gestionar conexiones a las BD
*      Clase SQL Permission
• Proporciona los permisos para poder usar el DriverManager a código en ejecución dentro de un Security Manager (por ejemplo applets)
*      Interfaz Driver
• Métodos para registrar y conectar controladores basados en tecnología JDBC
*      Clase DriverPropertyInfo
• Propiedades de un controlador

Interfaz con la aplicación
*      Envío de instrucciones SQL a la BD
• Connection
Métodos para crear instrucciones y para gestionar conexiones y sus propiedades
• Statement
Permite enviar instrucciones a la BD
• PreparedStatement
 Permite usar instrucciones preparadas o SQL básicas
• CallableStatement
 Llamada a procedimientos almacenados en la BD
• Savepoint
 Puntos de recuperación en una transacción
*      Recuperación de los resultados de la consulta a la BD
• ResultSet
 Conjunto de resultados que se devuelven de una query
• ResultSetMetaData
Información sobre las columnas del objeto ResultSet

Interfaz con la aplicación
*      Correspondencia de tipos SQL con clases e interfaces de Java
• Array SQL ARRAY
• Blob SQL BLOB
• Clob SQL CLOB
• Date SQL DATE
• NClob SQL NCLOB
• Ref SQL REF
• RowId SQL ROWID
• Struct SQL STRUCT
• SQLXML SQL XML
• Time SQL TIME
• Timestamp  SQL TIMESTAMP
• Clase Types
  constantes para tipos SQL
 *      Correspondencia de tipos SQL definidos por el usuario a Java
• SQLData
• SQLInput
• SQLOutput

Secuencia normal

*      Establecer la conexión con la BD
Cargar controladores (si se usa una versión de Java inferior a la 6).
Establecer la conexión

 *      Crear un objeto Statement para hacer petición a la BD
Asociar una sentencia SQL al objeto Statement
Proporcionar valores de los parámetros
 Ejecutar el objeto Statement

 *      Procesar los resultados

*      Liberar recursos (cerrar la conexión)

Si es necesario, se pueden ejecutar varias instrucciones dentro de una transacción (propiedades ACID)

     *      Abrir transacción
 Crear y ejecutar instrucciones
Procesar resultados

     *      Cerrar transacción

Registrar un controlador
     *      Los controladores se identifican con un URL JDBC de la forma
jdbc:subprotocolo:localizadorBD

      *      La conexión a la BD se hace con el método getConnection()





Ø  Ejemplo

Ejemplo: Conexión a una base de datos MySQL y consulta de una tabla.

import java.sql.*;
public class EjemploAccesoBD1 {
    public static void main(String[] args) {
        Connection conexion = null;
        try {
            // Cargar el driver
            Class.forName("com.mysql.jdbc.Driver");

            // Se obtiene una conexión con la base de datos.
            // En este caso nos conectamos a la base de datos prueba
            // con el usuario root y contraseña 1 daw
  conexion = DriverManager.getConnection("jdbc:mysql://localhost/prueba", "root", "1 daw");

            // Se crea un Statement, para realizar la consulta
            Statement s = conexion.createStatement();

            // Se realiza la consulta. Los resultados se guardan en el ResultSet rs
            ResultSet rs = s.executeQuery("select * from persona");

            // Se recorre el ResultSet, mostrando por pantalla los resultados.
            while (rs.next()) {
                System.out.println(rs.getInt("Id") + " " + rs.getString(2) + " " + rs.getDate(3));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        } finally { // Se cierra la conexión con la base de datos.
            try {
                if (conexion != null) {
                    conexion.close();
                }
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }
}



2.    Resumen

Java Database Connectivity (JDBC) es una interfase de acceso a bases de datos estándar SQL que proporciona un acceso uniforme a una gran variedad de bases de datos relacionales. JDBC también proporciona una base común para la construcción de herramientas y utilidades de alto nivel.
Simplemente JDBC hace posible estas tres cosas:
·         Establece una conexión con la base de datos.
·         Envía sentencias SQL
·          Procesa los resultados.
JDBC es un API (Application programming interface) que describe o define una librería estándar para acceso a fuentes de datos, principalmente orientado a Bases de Datos relacionales que usan SQL (Structured Query Language).
JDBC no sólo provee un interfaz para acceso a motores de bases de datos, sino que también define una arquitectura estándar, para que los fabricantes puedan crear los drivers que permitan a las aplicaciones javas el acceso a los datos.

La necesidad de JDBC, a pesar de la existencia de ODBC, viene dada porque ODBC es un interfaz escrito en lenguaje C, que al no ser un lenguaje portable, haría que las aplicaciones Java también perdiesen la portabilidad. Y además, ODBC tiene el inconveniente de que se ha de instalar manualmente en cada máquina; al contrario que los drivers JDBC, que al estar escritos en Java son automáticamente instalables, portables y seguros.





Toda la conectividad de bases de datos de Java se basa en sentencias SQL, por lo que se hace imprescindible un conocimiento adecuado de SQL para realizar cualquier clase de operación de bases de datos. Aunque, afortunadamente, casi todos los entornos de desarrollo Java ofrecen componentes visuales que proporcionan una funcionalidad suficientemente potente sin necesidad de que sea necesario utilizar SQL, aunque para usar directamente el JDK se haga imprescindible. La especificación JDBC requiere que cualquier driver JDBC sea compatible con al menos el nivel «de entrada» de ANSI SQL 92 (ANSI SQL 92 Entry Level).

3.    Summary

Java Database Connectivity (JDBC) is an interface for accessing SQL standard databases providing a uniform to a variety of relational database access. JDBC also provides a common basis for building tools and utilities high level.
JDBC just do these three things possible:
• Establishes a connection to the database.
• Send SQL statements
• Process the results.
JDBC is an API (application programming interface) that describes or defines a standard library for accessing data sources, primarily oriented relational databases using SQL (Structured Query Language).
JDBC not only provides an interface to access database engines, but also defines a standard architecture, so that manufacturers can create drivers that allow applications javas access to data.
The need for JDBC, despite the existence of ODBC is given because ODBC is an interface written in C language, not being a portable language, Java applications would also perdiesen portability. And, ODBC has the disadvantage that it has to manually install on each machine; unlike JDBC drivers, that being written in Java they are automatically installable, portable and safe.






All connectivity database is based on Java SQL statements, so it is essential to a proper understanding of SQL to perform any kind of operation databases. Although fortunately almost all Java development environments provide visual components that provide a sufficiently powerful functionality without the need to use SQL, but to use directly the JDK becomes essential. The JDBC specification requires that any JDBC driver supports at least level "input" of ANSI SQL 92 (ANSI SQL 92 Entry Level).


4.    Recomendaciones

ü       Elija controlador JDBC adecuado para su aplicación

Hay 4 Typs de controlador JDBC en Java y puede afectar directamente al rendimiento de la capa DAO. utilizar siempre último controlador JDBC si está disponible y prefieren Tipo 4 JDBC nativos .

ü    Conexión a la Base de Datos
Para que exista un enlace remoto con la Base de Datos, la aplicación no debe de conectarse directamente a la Base de Datos, sino que mediante los drivers JDBC - ODBC

Utilizar procedimientos almacenados
El uso de procedimientos almacenados está permitido en Java. El rendimiento de los procedimientos almacenados puede ser mayor al permitir que el controlador JDBC ejecute SQL estático en vez de SQL dinámico. No cree procedimientos almacenados para cada sentencia SQL individual que ejecute en el programa. No obstante, cuando sea posible, cree un procedimiento almacenado que ejecute un grupo de sentencias SQL.

5.    Conclusiones

El  avance de la tecnología hizo surgir estándares que permiten crear soluciones multibases de datos así como la conexión a múltiples bases de datos como el JDBC y lenguajes capaces de crear aplicaciones que se ejecuten en cualquier plataforma como JAVA las cuales aunque consumen un tiempo considerable ofrecen soluciones.
En esta página toda la información  de JDBC contiene las ideas más importantes de manera general con una investigación hecha a fondo para que pueda facilitar el trabajo de los lectores.

6.    Apreciaciones de Equipo

Este paquete permite conectarse a una base de datos, consultarla o actualizarla usando SQL. Su manejo es de importancia debido a la frecuencia con que las bases de datos son usadas hoy.
Así como con con Java se logra independencia de la plataforma, al trabajar con JDBC se logra además independencia del proveedor de la base de datos.
Una dificultad enfrentada por los desarrolladores de JDBC fue que existen muchos proveedores de bases de datos cada uno usando su propio protocolo. Es así como se acordó el desarrollo de una API Java para SQL, la cual accede la base de datos vía un administrador de drivers de terceros los cuales se conectan a bases de datos específicas.  Cada proveedor de bases de datos debía generar su propio driver conectable al administrador de drivers.


7.    Glosario de Términos

ü      BASE DE DATOS

Una base de datos es una colección de información organizada de forma que un programa de ordenador pueda seleccionar rápidamente los fragmentos de datos que necesite. Una base de datos es un sistema de archivos electrónico.
     ODBC
Open Database Connectivity (ODBC) es una interfaz de aplicaciones (API) para acceder a datos en sistemas gestores de bases de datos tanto relacionales como no relacionales, utilizando para ello SQL (Lenguaje de Consulta Estructurado). Todas las aplicaciones que soporten ODBC reconocerán una instrucción común de Lenguaje de Consulta Estructurado (SQL).

ü    API
Una API es un conjunto de funciones y procedimientos que cumplen una o muchas funciones con el fin de ser utilizadas por otro software. Las siglas API vienen del inglés Application Programming Interface. En español sería Interfaz de Programación de Aplicaciones.

ü  SQL
    El Lenguaje de consultas estructurado (SQL) se utiliza para crear consultas de base de datos. LibreOffice permite formular consultas en SQL o de forma interactiva mediante el ratón
ü  JDBC
    La API Java Database Connectivity (JDBC) se puede usar para conectarse con una base de datos desde LibreOffice. Los controladores de JDBC se escriben en el lenguaje de programación Java y no son exclusivos de ninguna plataforma.
ü  NETBEANS
NetBeans es un entorno de desarrollo integrado libre, hecho principalmente para el lenguaje de programación Java. Existe además un número importante de módulos para extenderlo. NetBeans IDE es un producto libre y gratuito sin restricciones de uso.

ü  STATEMENT
    Permite enviar instrucciones a la Base de Datos.

ü  DBMS
(Data Base Management System).
Son las siglas en inglés para los Sistemas de Gestión de Bases de Datos (SGBD). Bajo este nombre se conoce a productos de fabricantes como Oracle, Sybase, Informix, Ingres, Borland, Microsoft, IBM, etc.Sistema de administración de bases de datos.



8.    Linkografía






No hay comentarios.:

Publicar un comentario