Programación Orientada
a Objetos II
Introducción a (JDBC)
Java Database Connectivity
●
El API JDBC permite acceder a cualquier tipo
de datos tabulares y comúnmente se utiliza
para acceder a bases de datos relacionales.
Introducción a (JDBC)
Java Database Connectivity
●
Con JDBC se pueden realizar las siguientes
tres tareas básicas con bases de datos:
–
Conectarse a una base de datos
–
Consultar y actualizar una base de datos
–
Recuperar y procesar los datos obtenidos de
Arquitectura JDBC
Dos capas
DBMS
Aplicación Java
JDBC
Protocolo propietario
del DBMS
Servidor de base de datos
Máquina cliente
Arquitectura JDBC
Dos capas
●
La aplicación se comunica directamente con
la base de datos (BD).
●
Se requiere un driver JDBC para la BD.
●
Las instrucciones del usuario se entregan a la
BD y el resultado de éstas se regresa al
usuario.
●
La BD puede estar en otra máquina
conectada por medio de la red.
●
A esta configuración se le conoce como
Arquitectura JDBC
Tres capas
DBMS
Servidor de Aplicación
(Java)
JDBC
Protocolo propietario
del DBMS
Servidor de base de datos
Máquina cliente (GUI)
Applet o
navegador HTML
HTTP, RMI, CORBA u otro
Máquina servidor
(lógica de negocio)
Arquitectura JDBC
Tres capas
●
Las instrucciones se envían a una capa
intermedia de servicios que a su vez los envía
a la BD.
●
La BD procesa las instrucciones y regresa el
resultado a la capa intermedia, la cual lo envía
al usuario.
●
Este modelo permite controlar el acceso y las
actualizaciones a los datos.
●
También simplifica el despliegue de las
¿
Qué necesitamos para acceder a una BD desde
un programa en Java?
Conector para MySQL
Agregar biblioteca en Netbeans
●
En el listado de bibliotecas del proyecto, dar
click derecho y seleccionar
Add Library.
Para conectarse desde un
programa en Java
●
Dirección del servidor de BD (MySQL)
●
Nombre de la BD, login y password de la BD
●Registrar el controlador o driver
public class Main {
static String bd = "TestJava"; static String login = "XXXXXX"; static String password = "YYYYYY";
static String url = "jdbc:mysql://computacion.mxl.uabc.mx/"+bd;
public static void main(String[] args) {
Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url,login,password); if (conn != null) {
System.out.println("Conexión a base de datos "+url+" ... Ok"); conn.close();
}
} catch(SQLException ex) { System.out.println(ex);
} catch (ClassNotFoundException ex) { System.out.println(ex);
} catch (InstantiationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); }
} }
Crear un tabla en una BD
// Crear una tabla en la BDtry{
Statement st = conn.createStatement();
String tabla = "CREATE TABLE Empleados(NumeroEmpleado integer, Nombre varchar(10), Sueldo double(6,2) )"; st.executeUpdate(tabla);
System.out.println("Tabla creada con éxito!"); st.close; // cerrar statement para liberar recursos } catch(SQLException s){
System.out.println("La tabla Empleados ya existe!"); }
try {
conn.close(); // cerrar la conexión } catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); }
Guardar datos en la BD
// Insertar datos en la BDPreparedStatement s; try {
s = conn.prepareStatement("INSERT INTO Empleados (NumeroEmpleado, Nombre, Sueldo) VALUES(?,?,?)");
s.setInt(1, 1001);
s.setString (2, "Maria"); s.setDouble(3, 1500.25);
int count = s.executeUpdate();
s.close (); // cerrar statement para liberar recursos
System.out.println (count + " renglones fueron insertados."); } catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); }
Consultar datos de BD
// Consultar datos de la BD try { Statement s = conn.createStatement();
s.executeQuery ("SELECT NumeroEmpleado, Nombre, Sueldo FROM Empleados"); ResultSet rs = s.getResultSet ();
int count = 0; while (rs.next ()) {
int noEmp = rs.getInt ("NumeroEmpleado"); // nombre de la columna String nomEmp = rs.getString ("Nombre");
Double sueldo = rs.getDouble(3); // numero de columna
System.out.println (
"Empleado Numero = " + noEmp + ", nombre = " + nomEmp
+ ", sueldo = " + sueldo); ++count;
}
rs.close (); // liberar resultset s.close (); // liberar statement
System.out.println (count + " registros fueron recuperados."); } catch (SQLException ex) {
Borrar de una BD
// Borrar un renglón de la BD
try {
Statement s;
s = conn.createStatement();
s.executeUpdate("delete from Empleados where NumeroEmpleado=1001");
System.out.println("Reglón borrado con éxito.");
s.close(); // liberar statement
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
Preguntas
●
¿
Cómo cambio la estructura de una tabla?
●
¿Cómo verifico que exista una tabla?
●
¿Qué diferencia hay entre utilizar un
Statement
y un
PreparedStatement
?
●
¿Qué métodos tiene
ResultSet
para
Ejercicio
●
Crear una tabla para almacenar datos de un
libro: título, número de autor, ISBN, editorial,
fecha de publicación, costo.
●
Crear una tabla para almacenar los datos de
autores: número de autor, nombres, apellido
paterno, apellido materno, país, edad.
●
Desde una interfaz de usuario gráfica,
capturar y guardar datos en cada una de las
tablas.
Referencias
●
Tutorial JDBC - http://download.oracle.com/javase/tutorial/jdbc/overview/index.html
●Manual de referencia de MySQL - http://dev.mysql.com/doc/refman/5.5/en/
●
Practica de 10 de Base de Datos -
http://yaqui.mxl.uabc.mx/~bdatos/sem05-2/practica10.pdf
●
Java Api Statement -
http://download.oracle.com/javase/6/docs/api/java/sql/Statement.html
●
Java Api PreparedStatement -
http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html
●