Está en la página 1de 19

Instituto Tecnológico de Estudios

Superiores de Los Cabos

Nombre de la Carrera: ingeniería en sistemas computacionales

Nombre del trabajo: 6.1 reporte ODBC y JDBC

Asignatura: Taller de base de datos

Docente: Lilia Ureña Lugo

Grupo: ISC-05V

Estudiante: patrick Zaid Castro Gatica

Los Cabos, B.C.S., 29/11/2023


Introducción: En este trabajo hablaremos sobre los ODBC y saber para qué es
y cuál es su importancia en la base de datos que es cual es su importancia las
arquitecturas que están relacionadas con estas también sus arquitecturas los
drivers que están con estas opciones de datos etc. Como y cuales son los requisitos
para la gestión de la base de datos.

Descripción general
El objetivo principal de ODBC es proporcionar una capa de abstracción entre una
aplicación y diferentes sistemas de bases de datos, permitiendo a las aplicaciones
acceder a datos de manera uniforme, independientemente del sistema de gestión
de bases de datos subyacente. Esto se logra a través de controladores (drivers)
ODBC específicos para cada DBMS. Fue desarrollado por Microsoft en la década
de 1980 y se ha convertido en un estándar ampliamente adoptado para facilitar la
conectividad entre aplicaciones y bases de datos.
Aplicación ODBC: La aplicación que requiere acceder a la base de datos a través
de ODBC.

Controlador (Driver) ODBC: Un componente que actúa como intermediario entre la


aplicación y la base de datos específica. Cada DBMS tiene su propio controlador
ODBC.

Administrador ODBC: Un conjunto de herramientas que permite configurar y


gestionar las conexiones ODBC. Se utiliza para establecer parámetros de conexión,
como el nombre de la base de datos, el nombre de usuario y la contraseña.
Versiones de Conector

Conector/ODBC 8.0: se agregó compatibilidad con MySQL Server 8.0, incluido


caching_sha2_password y el atributo de conexión relacionado
GET_SERVER_PUBLIC_KEY.

Conector/ODBC 5.3: funciona con versiones de MySQL Server entre 4.1 y 5.7. No
funciona con versiones 4.0 o anteriores y no es compatible con todas las funciones
de MySQL 8. Cumple con la especificación ODBC 3.8 y contiene características
clave de ODBC 3.8, incluida la autoidentificación como controlador ODBC 3.8,
transmisión de parámetros de salida (compatible solo con tipos binarios) y
compatibilidad con el atributo de conexión SQL_ATTR_RESET_CONNECTION
(solo para el controlador Unicode). Connector/ODBC 5.3 también introduce una
biblioteca de configuración basada en GTK+, que proporciona un diálogo de
configuración GUI DSN en algunos sistemas basados en Unix. La biblioteca está
actualmente incluida en los paquetes binarios de Oracle Linux 6 y Debian 6. Otras
características nuevas de la serie 5.3 incluyen DSN de archivos y compatibilidad
con marcadores.
Connector/ODBC 5.2: actualiza el controlador ANSI de Connector/ODBC 3.51 al
código base 5.x. También incluye nuevas funciones, como habilitar declaraciones
preparadas del lado del servidor de forma predeterminada. En el momento de la
instalación, puede elegir el controlador Unicode para obtener la más amplia
compatibilidad con fuentes de datos que utilizan varios conjuntos de caracteres, o
el controlador ANSI para un rendimiento óptimo con una gama más limitada de
conjuntos de caracteres. Funciona con las versiones de MySQL 4.1 a 5.7.

Conector/ODBC 5.1: es una reescritura parcial del código base 3.51 y está
diseñado para funcionar con las versiones de MySQL 4.1 a 5.7.

drivers
• ODBC 2 de 32 bits.
Controlador Un controlador de 32 bits que:
Exporta solo funciones ODBC 2.x.
Muestra el comportamiento de ODBC 2.x para los cambios de comportamiento.

Controlador compatible con ISO y Open Group Un controlador de 32 bits que:


Exporta todas las funciones documentadas en los documentos Open Group o ISO
CLI. Esto incluirá algunas de las funciones que están en desuso en ODBC.
Muestra el comportamiento de ODBC 3.0 para los cambios de comportamiento.
No pasa necesariamente por el Administrador de controladores ODBC 3.0.

• Controlador ODBC 3.0 Un controlador de 32 bits que:


Exporta solo las funciones que están en ODBC 3.0 menos las funciones en desuso.
Es capaz de mostrar el comportamiento de ODBC 2.x o el comportamiento de
ODBC 3.0 con respecto a los cambios de comportamiento, en función del atributo
de entorno de SQL_ATTR_APP_ODBC_VERSION.

• Controlador ODBC 3.5 (o posterior) ANSI Un controlador de 32 bits que:


Exporta solo las funciones que están en ODBC 3.5 menos las funciones en desuso.
Es capaz de mostrar un comportamiento ODBC 2.x o un comportamiento ODBC
3.0, o un comportamiento ODBC 3.5 con respecto a los cambios de
comportamiento, basándose en el atributo de entorno
SQL_ATTR_APP_ODBC_VERSION.

• Controlador ODBC 3.5 (o posterior) Unicode Un controlador de 32 bits


que:
Compatible con todas las funciones de un controlador ANSI ODBC 3.5.
Exporta versiones Unicode de todas las API de cadena ODBC.
Puede almacenar y procesar datos Unicode en el origen de datos.

La Arquitectura
La arquitectura de ODBC consta de cuatro componentes:
• Aplicación: Realiza el procesamiento y llama a funciones de ODBC para
enviar instrucciones SQL y recuperar resultados.

• Administrador: de controladores Carga y descarga controladores en


nombre de una aplicación. Procesa llamadas a funciones de ODBC o las
pasa a un controlador.

• Controlador: Procesa llamadas a funciones de ODBC, envía solicitudes SQL


a un origen de datos específico y devuelve resultados a la aplicación. Si es
necesario, el controlador modifica la solicitud de una aplicación para que la
solicitud se ajuste a la sintaxis admitida por el DBMS asociado.

• Origen de datos: Consta de los datos a los que el usuario quiere acceder y
su sistema operativo asociado, DBMS y plataforma de red (si existe) que se
usan para acceder al DBMS.
EJEMPLO
a) Ejemplo de conexión
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>

int main() {
SQLHENV henv; // Entorno de ejecución
SQLHDBC hdbc; // Conexión a la base de datos
SQLRETURN ret; // Resultado de la operación

// Inicializar el entorno de ejecución


ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error al inicializar el entorno de ejecución\n");
return 1;
}

// Establecer el nivel de versión del entorno


ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,
SQL_IS_UINTEGER);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error al establecer el nivel de versión del entorno\n");
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 1;
}

// Inicializar la conexión a la base de datos


ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error al inicializar la conexión a la base de datos\n");
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 1;
}

// Establecer los detalles de la conexión (DSN y credenciales)


SQLCHAR* dsn = (SQLCHAR*)"NombreDSN"; // Reemplaza con el nombre de tu DSN
SQLCHAR* user = (SQLCHAR*)"TuUsuario";
SQLCHAR* password = (SQLCHAR*)"TuContraseña";

// Realizar la conexión
ret = SQLConnect(hdbc, dsn, SQL_NTS, user, SQL_NTS, password, SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error al conectar a la base de datos\n");
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 1;
}

// La conexión fue exitosa, realiza las operaciones necesarias aquí

// Cerrar la conexión y liberar recursos


SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);

return 0;
}

b) Ejemplo de consultas
#include <stdio.h>

#include <sql.h>

#include <sqlext.h>

int main() {

SQLHENV henv; // Entorno de ejecución

SQLHDBC hdbc; // Conexión a la base de datos

SQLRETURN ret; // Resultado de la operación

// Inicializar el entorno de ejecución

ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {

printf("Error al inicializar el entorno de ejecución\n");

return 1;

}
// Establecer el nivel de versión del entorno

ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,


SQL_IS_UINTEGER);

if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {

printf("Error al establecer el nivel de versión del entorno\n");

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return 1;

// Inicializar la conexión a la base de datos

ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {

printf("Error al inicializar la conexión a la base de datos\n");

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return 1;

// Establecer los detalles de la conexión (DSN y credenciales)

SQLCHAR* dsn = (SQLCHAR*)"NombreDSN"; // Reemplaza con el nombre de tu DSN

SQLCHAR* user = (SQLCHAR*)"TuUsuario";

SQLCHAR* password = (SQLCHAR*)"TuContraseña";

// Realizar la conexión

ret = SQLConnect(hdbc, dsn, SQL_NTS, user, SQL_NTS, password, SQL_NTS);

if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {

printf("Error al conectar a la base de datos\n");

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return 1;

// Ejemplo de consulta SELECT

SQLHSTMT hstmt; // Sentencia SQL


ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {

printf("Error al asignar la sentencia SQL\n");

SQLDisconnect(hdbc);

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return 1;

// Consulta SELECT

SQLCHAR* query = (SQLCHAR*)"SELECT columna1, columna2 FROM MiTabla";

ret = SQLExecDirect(hstmt, query, SQL_NTS);

if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {

printf("Error al ejecutar la consulta\n");

SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

SQLDisconnect(hdbc);

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return 1;

// Recuperar y mostrar resultados

SQLCHAR column1[255];

SQLCHAR column2[255];

while (SQLFetch(hstmt) == SQL_SUCCESS) {

SQLGetData(hstmt, 1, SQL_C_CHAR, column1, sizeof(column1), NULL);

SQLGetData(hstmt, 2, SQL_C_CHAR, column2, sizeof(column2), NULL);

printf("Columna1: %s, Columna2: %s\n", column1, column2);

// Liberar recursos

SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return 0;

Introducción a JDBC
JDBC es una interfaz de programación de aplicaciones (API) para el lenguaje de
programación Java que facilita el acceso y la manipulación de bases de datos
relacionales. Fue desarrollado por Sun Microsystems y forma parte del conjunto de
tecnologías Java para la conectividad con bases de datos.

Versiones del conector JDBC

El conector JDBC es un controlador JDBC desarrollado por Oracle para el sistema


de gestión de bases de datos MySQL. El conector JDBC proporciona una interfaz
uniforme para acceder a MySQL desde Java.

Existen varias versiones del conector JDBC, cada una con sus propias
características y mejoras. Las principales versiones del conector JDBC son las
siguientes:
• Versión 5.1: Esta versión es compatible con MySQL 5.1 y anteriores.

• Versión 5.5: Esta versión es compatible con MySQL 5.5 y anteriores.

• Versión 5.7: Esta versión es compatible con MySQL 5.7 y anteriores.

• Versión 8.0: Esta versión es compatible con MySQL 8.0 y anteriores.


La versión más reciente del conector JDBC es la 8.0, que se lanzó en 2020.
Esta versión incluye las siguientes mejoras:

• Soporte para MySQL 8.0: El conector JDBC 8.0 es compatible con las nuevas
características de MySQL 8.0, como las tablas temporales, las vistas materializadas
y las consultas preparadas con parámetros posicionales.
• Mejoras de rendimiento: El conector JDBC 8.0 ha sido optimizado para ofrecer un
mejor rendimiento.
• Seguridad mejorada: El conector JDBC 8.0 incluye nuevas funciones de
seguridad, como el cifrado de datos en tránsito y el cifrado de datos en reposo.

Para elegir la versión del conector JDBC adecuada, debe tener en cuenta la versión
de MySQL que esté utilizando. Si está utilizando una versión de MySQL anterior a
8.0, debe utilizar la versión 5.7 o 5.5 del conector JDBC. Si está utilizando MySQL
8.0, debe utilizar la versión 8.0 del conector JDBC.

La arquitectura JDBC es una especificación de una interfaz de programación de


aplicaciones (API) que permite a las aplicaciones Java acceder a bases de datos
relacionales.

La arquitectura JDBC consta de los siguientes componentes:

• Driver Manager: El Driver Manager es un componente que se encarga de cargar y


administrar los controladores JDBC. El Driver Manager proporciona una interfaz
uniforme para acceder a los controladores JDBC.
• Controlador JDBC: El controlador JDBC es un componente que proporciona la
interfaz entre la aplicación y la base de datos. El controlador JDBC es responsable
de traducir las solicitudes de la aplicación al formato que entiende la base de datos.

El Driver Manager es un componente que se encarga de cargar y administrar los


controladores JDBC. El Driver Manager proporciona una interfaz uniforme para
acceder a los controladores JDBC.

El Driver Manager utiliza el método registerDriver() para registrar los controladores


JDBC. Cuando una aplicación llama al método getConnection() del Driver Manager,
el Driver Manager busca un controlador JDBC registrado que pueda conectarse al
sistema de gestión de bases de datos especificado por la aplicación.

El controlador JDBC implementa las interfaces Connection, Statement,


PreparedStatement y CallableStatement. Estas interfaces proporcionan a las
aplicaciones un conjunto de métodos que se pueden utilizar para acceder a los
datos de la base de datos.
Aplicación
La aplicación es el software que utiliza JDBC para acceder a los datos de la base
de datos. La aplicación utiliza la API JDBC para enviar solicitudes al controlador
JDBC.

La API JDBC proporciona una serie de clases y métodos que se pueden utilizar para
acceder a los datos de la base de datos. Algunas de las clases y métodos más
importantes de la API JDBC son los siguientes:

• Class.forName()`: Este método se utiliza para cargar un controlador JDBC en la


memoria.
• DriverManager.getConnection():** Este método se utiliza para obtener una
conexión con una base de datos.
• Connection.createStatement():** Este método se utiliza para crear una sentencia
SQL.
• Statement.executeQuery():** Este método se utiliza para ejecutar una consulta
SQL.
• ResultSet.next():** Este método se utiliza para avanzar a la siguiente fila de un
conjunto de resultados.
• ResultSet.getString():** Este método se utiliza para obtener un valor de una
columna de un conjunto de resultados.
Beneficios de JDBC

JDBC ofrece los siguientes beneficios:

• Interoperabilidad: JDBC permite a las aplicaciones acceder a diferentes sistemas


de gestión de bases de datos sin tener que modificar su código.
• Seguridad: JDBC proporciona funciones de seguridad que ayudan a proteger los
datos de la base de datos.
• Eficiencia: JDBC puede optimizar el rendimiento de las aplicaciones de acceso a
datos.
Los drivers JDBC, o controladores JDBC, son componentes de software que
permiten a las aplicaciones Java interactuar con bases de datos. Proporcionan un
puente entre el lenguaje de programación Java y el sistema de base de datos
específico que se esté utilizando. Los controladores JDBC son esenciales para
desarrollar aplicaciones Java que necesitan acceder y manipular datos
almacenados en una base de datos.
Tipos de controladores JDBC

Existen cuatro tipos principales de controladores JDBC:

1. Puente JDBC-ODBC: Este controlador utiliza la API de Conectividad de base de


datos abierta (ODBC) para comunicarse con bases de datos. Es una buena opción
para aplicaciones que necesitan acceder a una amplia variedad de bases de datos,
pero puede ser menos eficaz que otros tipos de controladores.

2. Controlador JDBC nativo-API: Este controlador utiliza la API nativa del sistema de
base de datos para comunicarse con la base de datos. Es el tipo de controlador más
eficaz, pero también el más específico para un sistema de base de datos en
particular.

3. Controlador de protocolo de red: Este controlador utiliza un protocolo de red para


comunicarse con la base de datos. Es una buena opción para aplicaciones que
necesitan acceder a bases de datos que se encuentran en servidores remotos.

4. Controlador JDBC parcialmente nativo: Este controlador es un híbrido de los


controladores nativos-API y de protocolo de red. Utiliza la API nativa para
comunicarse con la base de datos cuando la base de datos se encuentra en la
misma máquina que la aplicación, y utiliza el protocolo de red para comunicarse con
la base de datos cuando la base de datos se encuentra en un servidor remoto.

Los controladores JDBC son una herramienta esencial para desarrollar aplicaciones
Java que necesitan acceder y manipular datos almacenados en una base de datos.
Proporcionan una forma portable, interoperable, eficaz y segura de conectarse a
una amplia variedad de sistemas de base de datos.

Ejemplo 1: Conectarse a una base de datos


Este ejemplo muestra cómo conectarse a una base de datos MySQL utilizando el
conector JDBC de Oracle:
import java.sql.*;

public class ConnectToMySQL {

public static void main(String[] args) throws SQLException {


// Carga el controlador JDBC para MySQL
Class.forName("com.mysql.cj.jdbc.Driver");

// Crea una conexión con la base de datos


Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "");

// Cierra la conexión
connection.close();
}
}
Este código primero carga el controlador JDBC para MySQL utilizando el método
Class.forName(). Luego, crea una conexión con la base de datos utilizando el
método DriverManager.getConnection(). La cadena de conexión especifica la
dirección del servidor MySQL, el puerto y el nombre de la base de datos. Los valores
de usuario y contraseña se especifican como parámetros de la cadena de conexión.
Ejemplo 1:
conexión JDBC (Java Data base Connectivity) a una base de datos. Este ejemplo
utiliza MySQL como el sistema de gestión de bases de datos, pero puedes adaptarlo
fácilmente para otros sistemas de bases de datos cambiando el controlador JDBC
y la URL de conexión.

java

Copy code

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class ConexionJDBC {

public static void main(String[] args) {

// Parámetros de conexión

String url = "jdbc:mysql://localhost:3306/tu_basedatos";

String usuario = "tu_usuario";

String contraseña = "tu_contraseña";

// Objeto de conexión

Connection conexion = null;

try {

// Cargar el controlador JDBC

Class.forName("com.mysql.cj.jdbc.Driver");

// Establecer la conexión

conexion = DriverManager.getConnection(url, usuario, contraseña);

if (conexion != null) {

System.out.println("Conexión exitosa a la base de datos");

// Aquí puedes realizar operaciones en la base de datos


}

} catch (ClassNotFoundException e) {

System.err.println("Error al cargar el controlador JDBC: " + e.getMessage());

} catch (SQLException e) {

System.err.println("Error de SQL: " + e.getMessage());

} finally {

// Cerrar la conexión en el bloque finally para asegurar que siempre se cierre

if (conexion != null) {

try {

conexion.close();

} catch (SQLException e) {

System.err.println("Error al cerrar la conexión: " + e.getMessage());

Asegúrate de tener el controlador JDBC correspondiente para tu base de datos. En


este ejemplo, se usa el controlador MySQL JDBC. Puedes descargarlo desde el sitio
web de MySQL (https://dev.mysql.com/downloads/connector/j/) y agregar el archivo
JAR a tu proyecto.

Referencias:
TylerMSFT. (2023, 12 octubre). Conceptos básicos de ODBC. Microsoft Learn.

https://learn.microsoft.com/es-es/cpp/data/odbc/odbc-basics?view=msvc-

170

MySQL :: MySQL Connector/ODBC Developer Guide :: 2 Connector/ODBC

versions. (s. f.). https://dev.mysql.com/doc/connector-odbc/en/connector-

odbc-versions.html
David-Engel. (2023, 3 septiembre). Tipos de controladores - ODBC API Reference.

Microsoft Learn. https://learn.microsoft.com/es-

es/sql/odbc/reference/develop-app/types-of-drivers?view=sql-server-ver16

Oracle. (2023, mayo 3). MySQL Connector/J 8.0 Documentation. Recuperado de


https://dev.mysql.com/doc/connector-j/8.0/en/
de diciembre de 2023, de https://learn.microsoft.com/es-
mx/sql/odbc/reference/introduction-to-sql-and-odbc?view=aps-pdw-2016-au7

IBM Documentation. (s/f). Ibm.com. Recuperado el 29 de noviembre de 2023, de


https://www.ibm.com/docs/es/developer-for-
zos/9.5.1?topic=SSQ2R2_9.5.1/com.ibm.etools.pl1.win.doc/topics/xf4aa3.htm
Abadi, D. J. (2012). Relational Databases. En S. J. Brodsky & M. Stonebraker (Eds.),
Readings in Database Systems (pp. 7-28). Boston, MA: Morgan Kaufmann
David-Engel. (s/f). Introducción a SQL y ODBC. Microsoft.com. Recuperado el 29
de noviembre de 2023, de

David-Engel. (s/f). Introducción a SQL y ODBC. Microsoft.com. Recuperado el 2

También podría gustarte