Capítulo
Nº 5
Conectar
con bases de datos en Java
5.1.
BASES DE DATOS EN JAVA
Una base de datos en cualquier sistema de
información, está formado por una colección ordenada de datos. Administrar una
base de datos significa almacenar y organizar de forma consistente esos datos,
y para eso existen sistemas para tal fin.
El más conocido entre los sistemas de bases de
datos es el Sistema de Base de Datos Relacionales (RDBMS), el cual se puede
considerar como el sistema estándar o universal. Entre los RDBMS más conocidos
están Microsoft SQL Server, Oracle, Sybase, DB2, Informix, MySQL, etc.
Para fines de este Curso Práctico, se usará una
conexión a
través del puente JDBC-ODBC, que a pesar de no contar con más soporte en las
versiones de Java más recientes, será de utilidad práctica para la versión de
Java que se está utilizando en este curso en el manejo de la base de datos UNSIR300.mdb.
5.2. CREACIÓN
DEL ORIGEN DE DATOS
5.2.1.
Qué es JDBC
JDBC (Java DataBase
Conectivity), es una interfaz de programación que permite a los programas Java
ejecutar sentencias SQL.
JDBC ya viene
incorporado en el JDK (Java Development
Kit o Kit de desarrollo de Java). En este caso se está utilizando el JDK
1.7.0.
Con la tecnología
JDBC se puede acceder a DBMS como Oracle, SQL Server, etc., y existe un driver
para cada uno de estos DBMS.
Nota: JDBC ya no está disponible en las versiones más
recientes de Java. Para versiones superiores a JDK 1.7.0, se necesita de aplicaciones de terceros
para conectar con JDBC Microsoft Access, como UCanAccess
5.0.1.
5.2.2.
El puente JDBC-ODBC (Open DataBase Conectivity)
Este puente
proporciona acceso JDBC API vía uno o más drivers ODBC. Implementa operaciones
JDBC traduciéndolas a ODBC, ODBC las recibe como las operaciones de un programa
aplicativo normal y las implementa en cualquier base de datos para la cual
exista un driver ODBC disponible. En este caso se implementa sobre una base de
datos Microsoft Access 2003.
Gráficamente sería
algo como esto:
Para crear el
origen de datos ODBC, se puede hacer de 2 formas distintas:
Primera
forma:
1.- Se puede crear a través del Origen de datos
de Windows.
2.- Primero en "Panel de Control" se
abre la opción "Herramientas administrativas".
3.- Luego se abre la opción "Orígenes
de datos (ODBC)".
4.- Se selecciona la pestaña "DSN de
sistema" y se pulsa el botón "Agregar".
5.- Se selecciona Microsoft Access Drives
(*.mdb) y se pulsa el botón "Finalizar".
6- Se crea el nombre del origen de datos "UNSIR300".
7.- Se pulsa el botón "Seleccionar" para
ubicar la base de datos en la carpeta
C:\Curso Práctico De Java\UNSIR300.mdb.
Para finalizar y
crear el origen de datos "UNSIR300" se
pulsa el botón ACEPTAR.
Segunda
forma (recomendada):
La segunda forma para crear el origen de datos ODBC, es creando
una clase, en este caso se llamará "ConexionODBC.java”, para cargar el
driver "sun.jdbc.odbc.JdbcOdbcDriver" que soporta esta versión de
java. Es a través de este driver y usando líneas de código como se logra
conectar con la base de datos UNSIR300.mdb.
1.- Se define el constructor llamado "ConexionODBC" para
usar el
driver "sun.jdbc.odbc.JdbcOdbcDriver".
Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").
getDeclaredConstructor(newInstance();
2.- Se define un método llamado "HacerConexion()" para crear
el origen de datos.
String myDB
="jdbc:odbc:Driver=
{Microsoft Access Driver
(*.mdb)};DBQ="+curDir+"/UNSIR300.mdb";
nConecta =
DriverManager.getConnection(myDB,"","");
ConexionODBC.java
//***************************************************************************
//****
Universidad Nacional Sistema de Inscripción Regular (UNSIR 3.0.0)
//****
//**** CLASE:
ConexionODBC (Carga el driver y hace la conexión con el origen
//**** datos
"UNSIR300" a través de un puente JDBC-ODBC)
//****
//**** AUTOR:
CARLOS CÓRDOVA - CC DESARROLLO DE SOFTWARE 2007-2022
//***************************************************************************
//***************************************************************************
// Paquetes de
la librería estándar de clases de Java que se usarán
//***************************************************************************
import
java.sql.*;
//**************************************************************************
// Inicio Clase
ConexionODBC
//***************************************************************************
public class ConexionODBC
{
//*** Se declaran las variables
Connection nConecta = null;
String curDir =
System.getProperty("user.dir");
//*** Se define el método principal
"main" de la Clase ConexionODBC
public static void main(String[]
args)
{
//*** Se ejecuta el constructor
ConexionODBC de la clase ConexionODBC,
//*** esta clase simplemente carga el
driver JDBC y hace la conexión
//*** el origen de datos
"UNSIR300" a través de un puente JDBC-ODBC
new ConexionODBC();
}
//*** Se define el constructor ConexionODBC
para cargar el driver
//***
"sun.jdbc.odbc.JdbcOdbcDriver"
ConexionODBC()
{
try
{
Driver d =
(Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getDeclaredConstructor().newInstance();
}
catch (Exception e)
{
System.out.println("Se ha
producido un error : " + e.toString());
}
}
//*** Se define el método HacerConexion para
crear la conexión
//*** de datos "UNSIR300"
public Connection HacerConexion()
{
Connection nConecta = null;
try
{
//*** Con estas dos línes de código no
hace falta crear el origen de datos DNS
String myDB
="jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ="+curDir+"/UNSIR300.mdb";
nConecta = DriverManager.getConnection(myDB,"","");
}
catch (Exception e)
{
System.out.println("Se ha
producido un error : " + e.toString());
}
return nConecta;
}
}
//**************************************************************************
// Fin Clase
ConexionODBC
//***************************************************************************
NOTA: Al compilar y ejecutar esta clase a nivel de
cónsola, no se mostrará nada en pantalla. Para poder apreciar algún resultado, se
debe crear otra clase que haga uso de ésta, por ejemplo una clase que muestre
en pantalla un listado de los alumnos.
Por ejemplo, se
creará una clase llamada "ListaEstudiantes.java" que hará uso (instanciará) a la clase "ConexionODBC.java" para mostrar por pantalla un listado de los nombres de los estudiantes.
ListaEstudiantes.java
//***************************************************************************
//**** Listado
de Estudiantes
****
//***************************************************************************
//***************************************************************************
// Paquetes de
la librería de clases estándar de Java
//***************************************************************************
import
java.io.*;
import
java.sql.*;
//***************************************************************************
// Inicio Clase
ListaEstudiantes
//***************************************************************************
public class ListaEstudiantes
{
//*** Se define el método principal
"main" de la Clase ListaEstudiantes
public static void main(String[]
args)
{
///*** Se crea el objeto
"programa" de la clase "ListaEstudiantes"
ListaEstudiantes programa = new
ListaEstudiantes();
programa.procesa();
}
///*** Método "procesa"
public void procesa()
{
//*** Se declara una variable y se crean
dos objetos para gestionar el manejo
//*** del origen de datos de la clase
ConexionODBC
InputStream nInp = System.in;
InputStreamReader nControl = new
InputStreamReader(nInp);
BufferedReader nBuffer = new
BufferedReader(nControl);
//*** Se crea una instancia nConexion de
la clase ConexionODBC para utilizar
//*** los métodos de esta clase, que
hacen el puente JDBC-ODBC
ConexionODBC nConexion = new
ConexionODBC();
Connection nConectaB = null;
//*** Se hace la conexión con la base de
datos "UNSIR300.mdb", se ordena el listado por el
//*** número de cédula y se muestra el
listado de estudiantes
try
{
nConectaB = nConexion.HacerConexion();
String sql = "SELECT * FROM
ESTUDIANTES ORDER BY CedulaEstudiante";
PreparedStatement ps =
nConectaB.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next())
{
System.out.println(rs.getString("NombreEstudiante"));
}
//*** Cerrar la conexión
rs.close();
nConectaB.close();
}
catch (Exception e)
{
System.out.println("Se ha
producido un error : "+ e.toString());
}
}
///*** Fin del método "procesa"
}
//*** Fin de la
clase TablaEstudiantes
//***************************************************************************
// Fin Clase
ListaEstudiantes
//***************************************************************************
Al compilar y
ejecutar esta clase en Java, se mostrará por pantalla lo siguiente:
Código fuente aquí: Curso Práctico De Java-03.rar