domingo, 9 de junio de 2013

UNIDAD IV.-TECNOLOGIAS DE CONECTIVIDAD DE BASES DE DATOS

                 4.1  ODBC
                            (Conectividad abierta de bases de datos)
                             INTRODUCCIÓN
ODBC fue desarrollado originalmente por Microsoft durante la década de 1990 y se convirtió en la base para la interfaz de nivel de llamada (CLI) estandariza por SQL Access Group en Unix y mainframe de mundo.
ODBC logra la independencia DBMS utilizando un controlador ODBC como una capa de traducción entre la aplicación y el DBMS. La aplicación utiliza funciones ODBC a través de un gestor de controladores ODBC con el que está vinculado, y el conductor pasa la consulta al DBMS. Un controlador ODBC puede ser pensado como análogo a una impresora u otro controlador, que proporciona un conjunto estándar de funciones para la aplicación a utilizar, y la aplicación de la funcionalidad de DBMS específico. Una aplicación que puede utilizar ODBC se conoce como "ODBC". Cualquier aplicación compatible con ODBC puede acceder a cualquier DBMS para el que se instala un controlador. Existen controladores para todos los principales DBMS, muchas otras fuentes de datos, como la libreta de direcciones sistemas y Microsoft Excel, e incluso para el texto o CSV archivos.
ODBC fue desarrollado originalmente por Microsoft durante la década de 1990, y se convirtió en la base para la Interfaz de nivel de llamada (CLI) estandarizada por SQL Access Group en Unix y mainframe de mundo. ODBC mantiene una serie de características que se han eliminado como parte del esfuerzo de CLI. Completo ODBC más tarde fue portado de nuevo a esas plataformas, y se convirtió en un estándar de hecho considerablemente más conocido que CLI. El CLI sigue siendo similar a ODBC, y las aplicaciones pueden ser portado de una plataforma a la otra con pocos cambios.
Definición:
 Es un estándar de lenguaje de programación C middleware API para acceder a los sistemas de gestión de bases de datos (DBMS). Los diseñadores de ODBC dirigidos para que sea independiente de los sistemas de bases de datos y sistemas operativos, una aplicación escrita utilizando ODBC puede ser portado a otras plataformas, tanto en el lado del cliente y el servidor, con pocos cambios en el código de acceso a datos.
Objetivo:
El objetivo de ODBC es hacer posible el acceder a cualquier dato desde cualquier aplicación, sin importar qué sistema de gestión de bases de datos (DBMS) almacene los datos. ODBC logra esto al insertar una capa intermedia (CLI) denominada nivel de Interfaz de Cliente SQL, entre la aplicación y el DBMS.
Características:
  • La conectividad de datos para aplicaciones Web y aplicaciones server críticas más escalable y confiable. Connect ODBC 3.5 soporta Microsoft Transaction Server para Oracle 8, SQL Server 7, y los sistemas de bases de datos Sybase Adaptive Server 12.
  • Es el primer y único ODBC driver para conectividad directa desde aplicaciones UNIX hacia Microsoft SQL Server – Este nuevo soporte permite a las organizaciones desarrollar o desplegar sus datos SQL Server para cliente/servidor y aplicaciones basadas en el Web residiendo sobre UNIX. Cursor scrollable es soportado para todas las bases de datos. Del mismo modo muchas bases de datos y ODBC drivers no soportan cursores de éste tipo. Con Connect ODBC 3.5 usted obtiene soporte para todas sus aplicaciones de ODBC.
  • DataDirect Connect ODBC libera el ODBC driver para aplicaciones en plataforma Irix y bases de datos como Informix y Sybase.

¿Cómo se procesa ODBC?
Para usar el ODBC, tres componentes son necesarios: cliente ODBC, el controlador ODBC, DBMS y un servidor (por ejemplo, Microsoft Access, SQL Server, Oracle, y FoxPro). En primer lugar, el cliente ODBC utilizará un comando (denominado “ODBC”) para interactuar (solicitante y / o envío de datos) con el servidor DBMS (back-end). Sin embargo, el DBMS servidor no entender el comando de la ODBC cliente aún, como el comando todavía no se ha procesado a través del controlador ODBC (front-end). Entonces, el controlador ODBC se decodificar el comando que puede ser procesado por el servidor ODBC y ser enviados allí. El servidor ODBC entonces en contacto con el controlador ODBC que se encargará de traducir el producto final al cliente ODBC.
ODBC asegura una conexión continua desde un cliente, servidor o aplicaciones Web. ODBC provee una solución completa e independiente para el acceso a datos, porque define estándares para el proceso y acceso físico a las bases de datos. ODBC permite a las aplicaciones cliente desarrollar en una única y común API.
Casi todas las DB actuales tienen un ODBC. Debido a que este elemento impone ciertas limitaciones, ya que no todo lo que la DB sabe hacer es compatible con la aplicación, como velocidad de proceso, tiempos de espera, máxima longitud de registro, número máximo de registros, versión de SQL, etc., está cayendo en desuso a cambio de otras técnicas de programación, pero aún le quedan muchos años de buen servicio.

Plataformas en las que se utiliza
La tecnología ODBC es utilizada en múltiples plataformas, incluyendo Windows 3.1, Windows NT, OS/2, Macintosh y UNIX, y DBMS´s como DB2, Oracle, SYBASE, INFORMIX, Microsoft SQL Server, DEC, Apple DAL, dBase, Excel, etc.

Funcionamiento:



ODBC es una API que permite a las aplicaciones acceder a datos de muchos sistemas de gestión  de bases de datos. ODBC ofrece a las aplicaciones cliente un lenguaje común para interactuar  con fuentes de datos y servicios de base de datos.


4.2 ADO.NET.
                                         INTRODUCCIÓN
ADO.NET responde a las siglas de Microsoft ActiveX Data Objects de la plataforma.NeT y es una mejora evolutiva de la tecnología ADO. Realmente es una evolución más en las tecnologías de acceso a la información.

ADO.NET forma parte del tercer nivel del conjunto de objetos que el .NET Framework ofrece para trabajar dentro de  esta plataforma, junto con XML constituyen un subgrupo específico que están preparados para manejar datos. Al igual  que el resto de los elementos que constituyen el .NET Framework se estarán ejecutando dentro del Motor de  Ejecución Común o CLR y está formado por un conjunto de clases administradas organizadas en espacios de  nombre.
ADO.NET proporciona acceso coherente a orígenes de datos como Microsoft SQL Server, así como a orígenes de datos  expuestos mediante OLE DB y XML (Microsoft Access, Microsoft Visual FoxPro, etc.). Las aplicaciones para usuarios  que comparten datos pueden utilizar ADO.NET para conectarse a estos orígenes de datos y recuperar, manipular y  actualizar los datos.
ADO.NET separa limpiamente el acceso a datos de la manipulación de datos y crea componentes discretos que se  pueden usar por separado o conjuntamente. ADO.NET incluye proveedores de datos de .NET Framework para  conectarse a una base de datos específica, ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente o se colocan en un objeto DataSet (repositorio en cliente) de ADO.NET con el fin de exponerlos al usuario para un propósito específico, junto con datos de varios orígenes, o de utilizarlos de forma remota entre niveles. El objeto DataSet de ADO.NET también puede utilizarse independientemente de un proveedor de datos de .NET Framework para administrar datos que son locales de la aplicación o que proceden de un origen XML.
ADO.NET fue diseñado para tener un acceso desconectado a la base de datos. En principio en ADO.NET se puede modelar la estructura de una base de datos desde el código sin necesidad de acceder a una base de datos existente.

Definición:

Es un conjunto de componentes del software que pueden ser usados por los programadores para acceder a datos y a servicios de datos. Es una parte de la biblioteca de clases base que están incluidas en el Microsoft .NET Framework. Es comúnmente usado por los programadores para acceder y para modificar los datos almacenados en un Sistema Gestor de Bases de Datos Relacionales, aunque también puede ser usado para acceder a datos en fuentes no relacionales. ADO.NET es a veces considerado como una evolución de la tecnología ActiveX Data Objects (ADO), pero fue cambiado tan extensivamente que puede ser concebido como un producto enteramente nuevo.


Las principales características:
  •       Trabaja desconectado del origen de datos que se utilice.
  •       Tiene una fuerte integración con XML y ASP.NET.
  •         El uso de ADO.NET es independiente del lenguaje de programación que se utilice.

La tecnología ADO.NET está basada en un nuevo modelo de componentes en la que las clases de acceso a datos y las clases contenedores forman parte del marco de trabajo de. NET sobre todo ADO.NET está pensado para ”interoperar” con otros componentes, sistemas ,etc. Gracias al uso de XML y a soportar estándares como HTTP, XML, o SOAP.

El modelo de ADO.NET está dividido en dos grupos:
  •          Los proveedores de datos o Mnaged Data Providers.
  •       Los contenedores de datos, que aunque están  vinculados a los orígenes de datos, son independientes de ellos.

ADO.NET evolucionó de la tecnología Microsoft ActiveX Data Objects (ADO), que proporciona acceso a datos independientemente de la plataforma. La ventaja básica de la arquitectura ADO.NET es que permite a los desarrolladores manipular datos sin importar la ubicación de los mismos.



 Arquitectura :

   

La pieza central de cualquier solución de software usando ADO.NET es el Dataset. Un Dataset es una copia en la memoria de los datos de la base de datos. Un Dataset puede contener datos de cualquier cantidad de tablas o vistas de bases de datos. El Dataset constituye una vista desconectada de la base de datos porque existe en la memoria sin una conexión activa a una base de datos que contenga las tablas o vistas correspondientes. Esta arquitectura desconectada permite una mayor escalabilidad solamente con usar los recursos del servidor de la base de datos cuando se lean o escriban desde la base de datos.

La ventaja más grande de utilizar un Dataset es que proporciona una vista de la base de datos con varias tablas y sus relaciones, todas sin tener una conexión activa a la base de datos. Puede pensar en un Dataset como una base relacional miniatura dentro de la memoria. Normalmente, se crea un Dataset y se llena de manera programática. Contiene varias tablas, cada una de las cuales corresponde a una tabla o vista de la base de datos.

La ventaja más grande de utilizar un Dataset es que proporciona una vista de la base de datos con varias tablas y sus relaciones, todas sin tener una conexión activa a la base de datos. Puede pensar en un Dataset como una base relacional miniatura dentro de la memoria. Normalmente, se crea un Dataset y se llena de manera programática. Contiene varias tablas, cada una de las cuales corresponde a una tabla o vista de la base de datos.
En aplicaciones con n niveles, normalmente los datos se pasan desde la base de datos a un objeto de negocios de nivel medio y luego a la interfaz. Para acomodar el intercambio de datos, ADO.NET usa un formato de persistencia y transmisión con base en XML. Es decir, para transmitir datos de un nivel a otro, una solución ADO.NET expresa los datos en memoria (el Conjunto de datos) como XML y después envía el XML a otro componente.

 componentes principales de una solución ADO.NET



La arquitectura ADO.NET aprovecha XML. Debido a que XML es el formato para transmitir datos, cualquier aplicación Web que pueda leer el formato XML puede procesar datos.

ADO.NET consiste en dos partes primarias:

Data provider 

Estas clases proporcionan el acceso a una fuente de datos, como Microsoft SQL Server y Oracle. Cada fuente de datos tiene su propio conjunto de objetos del proveedor, pero cada uno tienen un conjunto común de clases de utilidad:

  •   Connection: Proporciona una conexión usada para comunicarse con la fuente de datos. También actúa como Abstract Factory para los objetos command.
  •  Command: Usado para realizar alguna acción en la fuente de datos, como lectura, actualización, o borrado de datos relacionales.
  •  Parameter: Describe un simple parámetro para un command. Un ejemplo común es un parámetro para ser usado en un procedimiento almacenado.
  •     DataAdapter: "Puente" utilizado para transferir data entre una fuente de datos y un objeto DataSet .
  •  Data Reader: Es una clase usada para procesar eficientemente una lista grande de resultados, un registro a la vez.

DataSets 

Los objetos DataSets, es un grupo de clases que describen una simple base de datos relacional en memoria, fueron la estrella del show en el lanzamiento inicial (1.0) del Microsoft .NET Framework. Las clases forman una jerarquía de contención:
·         Un objeto DataSet representa un esquema (o una base de datos entera o un subconjunto de una). Puede contener las tablas y las relaciones entre esas tablas.
·         Un objeto DataTable representa una sola tabla en la base de datos. Tiene un nombre, filas, y columnas.
·         Un objeto DataView "se sienta sobre" un DataTable y ordena los datos (como una cláusula "order by" de SQL) y, si se activa un filtro, filtra los registros (como una cláusula "where" del SQL). Para facilitar estas operaciones se usa un índice en memoria. Todas las DataTables tienen un filtro por defecto, mientras que pueden ser definidos cualquier número de DataViews adicionales, reduciendo la interacción con la base de datos subyacente y mejorando así el desempeño.
·         Un DataColumn representa una columna de la tabla, incluyendo su nombre y tipo.
·         Un objeto DataRow representa una sola fila en la tabla, y permite leer y actualizar los valores en esa fila, así como la recuperación de cualquier fila que esté relacionada con ella a través de una relación de clave primaria - clave extranjera.
·         Un DataRowView representa una sola fila de un DataView, la diferencia entre un DataRow y el DataRowView es importante cuando se está interactuando sobre un resultset.

·         Un DataRelation es una relación entre las tablas, tales como una relación de clave primaria - clave ajena. Esto es útil para permitir la funcionalidad del DataRow de recuperar filas relacionadas.
·         Un Constraint describe una propiedad de la base de datos que se debe cumplir, como que los valores en una columna de clave primaria deben ser únicos. A medida que los datos son modificados cualquier violación que se presente causará excepciones.
Un DataSet es llenado desde una base de datos por un DataAdapter cuyas propiedades Connection y Command que han sido iniciados. Sin embargo, un DataSet puede guardar su contenido a XML (opcionalmente con un esquema XSD), o llenarse a sí mismo desde un XML, haciendo esto excepcionalmente útil para los servicios web, computación distribuida, y aplicaciones ocasionalmente conectadas desconectados.

             Clases que maneja ADO.NET

                                                                
Clases contenidas en ADO.NET.

Descripción  de las clases:
  •   XxxConnection: representa una conexión. Almacena, entre otras cosas, el string de conexión (connection string), y permite conectarse y desconectarse con una base de datos.
  • XxxCommand: permite almacenar y ejecutar una instrucción SQL contra una base de datos, enviando parámetros de entrada y recibiendo parámetros de salida.
  • XxxDataReader: permite acceder a los resultados de la ejecución de un comando contra la base de datos de manera read-only (sólo lectura), forward-only (sólo hacia adelante). Esta clase se utiliza en escenarios conectados, ya que no es posible operar sobre los registros de un DataReader estando desconectado de la fuente de datos.
  • XxxDataAdapter y DataSet: en conjunto, estas clases constituyen el corazón del soporte a escenarios desconectados de ADO.NET. El DataSet es una representación en memoria de una base de datos relacional, que permite almacenar un conjunto de datos obtenidos mediante un DataAdapter. El DataAdapter actúa como intermediario entre la base de datos y el DataSet local desconectado. Una vez que el DataSet se encuentra lleno con los datos que se necesitan para trabajar, la conexión con la base de datos puede cerrarse sin problemas y los datos pueden ser modificados localmente. Por último, el DataAdapter provee un mecanismo para sincronizar los cambios locales contra el servidor de base de datos. Nótese que la clase System.Data.DataSet no tiene el prefijo Xxx, ya que es independiente del proveedor de acceso a datos utilizado.
Transacciones

Para empezar una transacción en ADO.NET se llama al método BeginTransaction que acepta el parámetro IsolationLevel (nivel de aislamiento) y/o el nombre, y devuelve un objeto transacción de la clase OleDbTransaction o SqlTransaction dependiendo del proveedor que se utilice.
El objeto SqlTransaction Soporta savepoints o puntos de almacenamiento de la transacción que permiten deshacerla (RollBack) más tarde. Para almacenar un savepoint se utiliza el método sabe. Esta funcionalidad es equivalente a la declaración “SAVE TRANSACTION”que se realiza en T-AQL.
Si se quiere deshacer una transacción ya almacenada, ha de utilizarse el método Rollback que puede llevar como parámetro el nombre del punto de almacenamiento previamente guardado. En caso de querer aceptar la transacción se utilizará el método commit.

                                                          
                                                                4.3 JDBC  
                                                       (Java Database Connectivity)
                                                   INTRODUCCIÓN
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. 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 la aplicación java el acceso a los datos.
Definición:
DBC 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 la aplicación java el acceso a los datos.
JDBC permite que cualquier comando SQL pueda ser pasado al driver directamente, con lo que una aplicación Java puede hacer uso de toda la funcionalidad que provea el motor de Base de Datos, con el riesgo de que esto pueda producir errores o no en función del motor de Base de Datos.
                                     
La arquitectura básica de JDBC es simple. Una clase llamada DriverManager provee un mecanismo para controlar un conjunto de drivers JDBC. Esta clase intenta cargar los drivers especificados en la propiedad del sistema jdbc.drivers. También podemos cargar un driver explicitamente usando Class.forName(). Durante la carga, el driver intentará registrarse a si mismo usando el método clase DriverManager.registerDriver(). Cuando se invoque al método DriverManager.getConnection(), ésta buscará el primer driver de los registrados que pueda manejar una conexión como la descrita en la URL y retornará un objeto que implemente el interfaz java.sql. Connection.
Transacciones
JDBC permite agrupar instrucciones SQL en una sola transacción. Así, podemos asegurar las propiedades ACID (Atomicidad, Consistencia, Aislamiento, Durabilidad) usando las facilidades transaccionales del JDBC.
El control de la transacción es realizado por el objeto Connection. Cuando una conexión se crea, por defecto es  en modo auto - commit. Esto significa que cada instrucción individual SQL se trata como una transacción en sí misma, y se comprometerá en cuanto la ejecución sea terminada. (Esto no es exactamente preciso, pero podemos encubrir esta sutileza por propósitos didácticos).
Nosotros podemos desactivar el modo auto - commit para una conexión activa con:  con.setAutoCommit(false) ;
y se lo vuelve a activar con:
 con.setAutoCommit(true) ;
Una vez que el auto-commit is desactivado, ninguna declaración del SQL se comprometerá (es decir, la base de datos no se actualizará permanentemente) hasta que usted le haya dicho explícitamente que comprometa invocando el método commit():
 con.commit() ;
A cualquier punto antes del commit, podemos invocar un rollback () para reversar la transacción, y restaurar los valores al último punto de commit (antes de las actualizaciones intentadas).
Aquí hay un ejemplo que presenta estas ideas:
 con.setAutoCommit(false);
 Statement stmt = con.createStatement();
 stmt.executeUpdate("INSERT INTO Venta VALUES('El Cantinazo','Rivereña',1000)" );
 con.rollback();
 stmt.executeUpdate("INSERT INTO Sells VALUES('Bar Ato', 'Mellir', 1200)" );
 con.commit();
 con.setAutoCommit(true);
Examinemos el ejemplo para entender los efectos de varios de los métodos. Primero se declaró desactivar el autocommit, indicando eso que las siguientes instrucciones necesitaban considerarse como una unidad. Luego intentamos insertar en la tabla Venta la tupla ('El Cantinazo','Rivereña',1000). Sin embargo, este cambio no será realizado hasta el final (cuando se ejecute el commit). Cuando invocamos el rollback, nosotros cancelamos la anterior inserción y en efecto se elimina cualquier intención de insertar la tupla anterior. Note que Venta ahora todavía es como era antes de que intentáramos la inserción. Ahora intentamos otra inserción, y esta vez, nosotros comprometemos la transacción. Sólo es ahora que Venta se afecta permanentemente y tiene una nueva tupla en ella. Finalmente, restablecemos la conexión para realizar de nuevo un auto-commit. También podemos asignar niveles de aislamiento de la transacción como se desee. Por ejemplo, podemos asignar el  nivel de aislamiento de transacción en TRANSACTION_READ_COMMITTED, que no permitirá acceder un valor  hasta después de que haya sido comprometido (committed), y puede prohibir las lecturas sucias. Hay cinco que  valores para niveles de aislamiento proporcionados en la interfaz Connection. Por defecto, el nivel de aislamiento es el serializable. JDBC nos permite definir el nivel de aislamiento de transacción a la base de datos (usando el método de Connection : getTransactionIsolation ) y asignar el nivel apropiado (usando el método de Connection : setTransactionIsolation).
Normalmente se usará rollback en combinación con el manejo de excepciones de Java para recuperar errores predecibles (o no). Tal una combinación provee un mecanismo excelente y fácil para el manejo de integridad de los datos.
Instalación de JDBC

El proceso de instalación de JDBC se podría dividir en tres partes distintas:

  • Descargar el API de JDBC:
JDBC viene incluido en el corazón de la plataforma Java, tanto en la J2SE como en la J2EE.
Versión actual JDBC 1.3 (incluida en J2SE 1.4)
Versión en borrador JDBC 1.4

  •          Instalar el driver en la máquina cliente (máquina que crea las conexiones)
La instalación del driver dependerá en gran medida del tipo de driver que hayamos seleccionado.
Para los tipo 1 y 2, además de las librerías del driver, necesitaremos ciertas librerías propias del cliente del motor de base de datos que estemos usando y quizá ficheros de configuración...
Para el tipo 3, en la máquina cliente tan solo necesitaremos el driver. En el servidor donde resida el middleware, necesitaremos drivers específicos de cada motor de base de datos y en su caso, librerías propias del cliente del motor de base de datos.
Para el tipo 4, tan solo necesitaremos el driver.

  •          Instalar el controlador o motor de base de datos.
Evidentemente, necesitaremos tener instalado un motor de base de datos. Esta instalación será distinta en función de la Base de Datos y del S.O donde vaya a correr.












                                       





























Fuentes Bibliograficas:



http://www.willydev.net/InsiteCreation/v1.0/Desde0/m06/06m3.htm