You are on page 1of 22

Conexin a base de datos

JAVA III

SENA CEAI REGIONAL VALLE

Objetivos:

Permitir conectar nuestra aplicacin con una Base de datos, e igualmente se llevar a
cabo un test de conexin a travs de un pequeo fragmento de cdigo el cual se
colocar dentro del mtodo de un botn.
Identificar la manipulacin de las sentencias SQL mediante programas Java.

Conocimientos Previos:
Para la realizacin de esta actividad los aprendices tienen que
tener claro los conceptos de:

Clases.
Creacin de Objetos.
Constructores.
Interface Grafica
Sentencias SQL

Enlaces de apoyo
http://creando.bligoo.com/como-crear-un-formulario-basicoen-java

REFLEXION

de

Cuenta la leyenda, que una vez, una serpiente empez a


perseguir a una lucirnaga; sta hua rpido y con miedo
la feroz depredadora, pero la serpiente no pensaba
desistir. Huy un da y ella no desista, dos das y
nada. En el tercer da, ya sin fuerzas, la lucirnaga par
y dijo a la serpiente:
Puedo hacerte tres preguntas?
No acostumbro dar este precedente a nadie, pero como te
voy a devorar, puedes preguntar.

- Pertenezco a tu cadena alimenticia?


- No.
- Yo te hice algn mal?
- No.
- Entonces, Por qu quieres acabar conmigo?
- Porque no soporto verte brillar.
Muchos de nosotros nos hemos visto envueltos en situaciones donde nos
preguntamos: Por qu me pasa esto si yo no he hecho nada malo, ni
dao a nadie?
Sencillo es de responder... Porque no soportan verte brillar!...
Cuando esto pase, no dejes de brillar, contina siendo t mismo,
contina y sigue dando lo mejor de ti, sigue haciendo lo mejor, no
permitas que te lastimen, no permitas que te hieran, sigue brillando y no
podrn tocarte... porque tu luz seguir intacta.
Tu esencia permanecer, pase lo que pase...
Se siempre autntico, aunque tu luz moleste a los predadores

Estudiaremos los mecanismos provistos por Java para que los programas puedan
conectarse a bases de datos para consultar y modificar informacin.
Para esto se requiere tener conocimientos bsicos sobre base de datos relaciones y
SQL(Structured Query Language).

Conceptos bsicos sobre base de datos relacionales:


Las bases de datos almacenan y gestionan informacin organizndola en forma de tablas.
Podramos decir(en principio) que una base de datos es un conjunto de tablas
relacionadas entre s.
Una tabla es un conjunto de filas y columnas. Llamaremos registros a las filas y
campos a las columnas. Los campos representan atributos y los registros representan
valores puntuales para esos atributos. As, si tenemos una tabla PERSONA con los campos:
nombre, DNI y direccin (atributos de una persona). Cada registro de esta tabla (fila)
representa a una persona.

EJEMPLO
TRABAJAREMOS CON DOS TABLAS: MP (EMPLEADOS) Y DPT
(DEPARTAMENTOS)

DPT
deptno
1
2
3
EMP
EMPNO
10
20
30
40
50
60

Dname
Ventas
Compras
Rhh

ENAME
JUAN
ALBERTO
PEDRO
MARCOS
JAIME
PABLO

loc
Buenos Aires
Buenos Aires
La plata

DEPTNO
1
3
1
2
2
1

HIREDATE
02/05/90
03/01/93
02/06/85
05/12/98
07/11/82
07/10/96

Veamos que la tabla DPT tiene tres registros (3 departamentos) y la tabla EMP
(empleados) tiene 6 empleados. Vemos tambin que cada columna (cada campo)
contiene informacin de un tipo de datos (EMPNO son nmeros enteros, ENAME son
cadenas de caracteres, HIREDATE son fechas).
La descripcin formal de cada una de estas tablas la veremos a continuacin:

DEPT (tabla de departamentos)


DPTNO (INTEGER, PRIMARY KEY)
DNAME (VARCHAR (15), NOT NULL)
LOC (VARCHAR (15), NOT NULL)

Lo anterior debe leerse de la siguiente manera: la tabla DEPT tiene tres campos: deptno
(numero de departamento), dname (nombre del departamento), y loc (localidad donde
funciona el departamento).
Los campos son de un determinado tipo de datos. En la tabla DEPT el campo dptno es de
tipo INTEGER (numrico entero) y los campos dname y loc son tipo VARCHAR (15)
(cadena de 15 caracteres). La tabla no admite campos NULL (campos que no tengan
asignado un valor concreto).
El campo deptno es primary key (clave primaria). Esto exigen que los valores de este
campo existan y sean nicos para todos los registros. Es decir, en esta tabla no puede
haber dos o mas registros con el mismo numero de departamento.
EMP (tabla de empleados)

empno (INTEGER, PRIMARY KEY)


ename ( VARCHAR (15), NOT NULL)
dptno (INTEGER, FOREIGN KEY (DEPT. dptno))
hiderate (DATE, NOT NULL)

En anlisis de la tabla EMP es similar al de la tabla DEPT, pero hay una diferencia: EMP
tiene una relacin de integridad con DEPT definida por la foreign key (clave fornea)
asociada al campo dptno.

Relaciones forneas y consistencia de datos


En las tablas de nuestros ejemplos EMP tiene la informacin de los empleados de una
compaa y DEPT tiene la informacin de los diferentes departamentos de la misma, y
cada uno de los empleados registrados en EMP trabaja en alguno de los departamentos
registrados en DEPT. Esta relacin est dada por los campos deptno de ambas tablas.
Analizando el ejemplo de datos expuesto ms arriba vemos que los empleados Juan,
Pedro y Pablo trabajan en el departamento 1(tienen deptno=1), Marcos y Jaime trabajan
en el departamento 2 y Alberto trabaja en el departamento 3.
No debera suceder que un empleado trabaje en un departamento que no existe. En otras
palabras: no debera existir ningn registro en EMP cuyo campo deptno no se
corresponda con el campo deptno de alguno de los registros de DEPT.
Decimos que existe una relacin fornea o foreing key entre el campo deptno de la
tabla EMP y el campo deptno de la tabla DEPT.
Si llegase a existir un registro en EMP cuyo deptno no estuviera registrado en DEPT
tendramos un problema de inconsistencia de datos, pero afortunadamente la base de

datos no nos permitir ingresar informacin inconsistente ni tampoco modificar la


existente si es que a raz de esta modificacin vamos a ocasionar alguna inconsistencia en
los datos.
Tambin tendramos inconsistencia de datos si en una tabla hubiera ms de una fila con la
misma primary key, pero esto tampoco suceder porque la base de datos se interpondr
en nuestro camino cuando pretendamos insertar una fila con una clave primaria
duplicada o bien intentemos modificar la clave de una fila ya existente.

JDBC es un conjunto de clases e interfaces Java que permiten la manipulacin de


sentencias SQL de una fuente de datos (base de datos).
Las actividades bsicas de programacin que vamos a utilizar en JDBC:
1

Conectarse a una fuente de datos, como una base de datos.

Enviar Querys y Updates a la base de datos.

Recuperar y procesar los resultados obtenidos de la base de


datos en respuesta al Query obtenido.

COMPONENTES JDBC: librera java.sql:

El driver JDBC-ODBC es parte de la plataforma Java. No es un driver 100% Java.


Traduce las llamadas a JDBC a invocaciones ODBC a travs de libreras DBC del sistema operativo.

Realizar la siguiente consulta y realizar cuadro comparativo en donde se pueda identificar sus
caractersticas principales:
Objetos Statement.
Sentencia executeUpdate().
Sentencia executeQuery()
ResultSetMetaData.
TestResultSetMetaData.java
DatabaseMetaData.
TestMetaData.java
DefaultTableModel

1. Crear una base de datos Cliente y tabla clientes

2. Debemos descargar

el

archivo

.jar conocido

como MySQL Link descarga conector

https://drive.google.com/file/d/0B59D4Z6JQZFFZFRfRHlPU1Q5dEE/edit?usp=sharing
3. CREE UN NUEVO PROYECTO

4. Creo los paquetes que requiere en el proyecto bajo el Modelo Vista Controlador.

5. aadir nuestro controlador a las libreras de nuestro proyecto.

6. Creo una nueva clase en el paquete ConexionDB y la llamo tambin Conectar, sin cambiar los nombres.

7. Borro el cdigo de la clase y lo reemplazo por este cdigo de conexin a Base de datos:
package ConexionDB;//PAQUETE NOMBRE
import java.sql.Connection; // LIBRERIA DE CONEXION BD
import java.sql.DriverManager; //DRIVER DE MANEJO DE DATOS
import java.sql.SQLException; //OMITIR O ENVIAR MENSAJES DE ERROR SQL
import javax.swing.JOptionPane; // ENVIA MENSAJES EMERGENTES EN PANTALLA
public class conectar {
//Ahora instanciaremos un objeto de tipo "Connection", al cual asignaremos el valor "null".
//Esto ir dentro del mtodo del punto anterior:
Connection conect = null;
//Lo siguiente es un mtodo, este contiene la propiedad "public", y devolver un valor de
//tipo "Connection", que en otras palabras sera la conexin con nuestra Base de datos; y
//se le ha asignado a este mtodo el nombre de "Conexin":
public Connection conexion()

{
//Proseguiremos a crear un bloque "try-catch", debido a que el cdigo que hemos de
//emplear podra producir una excepcin y/o error. Este bloque ir dentro del mtodo
//mencionado
try {

//Cargamos el Driver MySQL


Class.forName("org.gjt.mm.mysql.Driver");
//Ahora utilizando el mtodo DriverManager.getConnection, obtendremos la conexin
//con nuestra Base de datos, y procederemos administrarla y almacenarla en el objeto tipo
//Connection instanciado al principio del mtodo "Conexin". Esta lnea de cdigo ir
//dentro del "try{}"
Conect= DriverManager.getConnection("jdbc:mysql://localhost/prueba","root","28540464");
JOptionPane.showMessageDialog(null,"conectado");
} catch (HeadlessException | ClassNotFoundException | SQLException e) {
/*En el caso dado de que ocurra un error al tratar de conectarnos con nuestra Base de
datos, procederemos a mostrar dicha excepcin a travs de una pequea ventana, usando
el componente JOptionPane. Esta parte ir dentro del "catch(){}" */
JOptionPane.showMessageDialog(null,"Error al onectar "+e);
}
/*Por ltimo retornaremos la conexin obtenida, la cual podra ser exitosa o nula. Esta lnea
ir por fuera del try-catch, pero dentro del mtodo Conexin. */
return conect;
}}
8.

Ahora haremos una prueba para verificar que si nos podemos conectar a nuestra base
de datos, para esto nos iremos a nuestro formulario principal CLIENTES y daremos doble
clic sobre un botn que vamos a agregar para hacer la prueba:

private void pruebaActionPerformed(java.awt.event.ActionEvent evt) {


conectar basedatos = new conectar(); //creamos objeto para realizar conexin.
basedatos.conexion();

9. CREO EL FORMULARIO PARA EL INGRESO DE DATOS:

DISEO CON LABELS CUADROS DE TEXTO Y BOTONES LA ESTRUCTURA GRAFICA QUE ME ALMACENARA LA
INFORMACION SE RECOMIENDA NO HACER EL PRIMER FORMULARIO PARA UNA TABLA QUE TENGA LLAVES
FORANEAS.
10. REEMPLAZO EL NOMBRE DE LOS CUADROS DE TEXTO POR LOS CAMPOS QUE IRAN REALMENTE CON
TXT AL COMIENZO.

DEBIDO A QUE EL CUADRO DE TEXTO ALMACENA EN VARIABLES Y NECESITO VARIABLES DE CODIGO TAMBIEN.
CUADRO DE TEXTO GUARDA COMO STRING Y ESTO DEBE CONVERTIRSE A LA VARIABLE QUE NECESITO. EL
CUADRO DE TEXTO NO PUEDE LLAMARSE IGUAL QUE UNA VARIABLE.

11. ASIGNO NOMBRE A LOS BOTONES (FUNCIONES)

12 .

public class clientes extends javax.swing.JFrame {


import java.sql.*; //librera s que vamos a utilizar en nuestro proyecto
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import java.sql.Connection; // LIBRERIA DE CONEXION BD
import java.sql.DriverManager; //DRIVER DE MANEJO DE DATOS
import java.sql.SQLException; //OMITIR O ENVIAR MENSAJES DE ERROR SQL
DefaultTableModel modelo; // El DefaultTableModel es una clase que
//implementa TableModelque contiene todos los mtodos necesarios para modificar
//datos en su interior, aadir filas o columnas y darle a cada columna el nombre que
//se desee. Esto lo utlizaremos mas adelante

public clientes() {
initComponents();
limpiar();//mtodos que vamos a crear que solo vamos colocando a medida que
vamos crendolos para que no salgan con error.
bloquear();
cargar("");
}
void limpiar(){ //Creamos el mtodo para limpiar los campos
NOMBRE.setText("");

//Realizar esto para los dems campos: apellido,ciudad,telfono al campo cdigo no se


aplicara este mtodo ya que cdigo es nico sin modificaciones.
}
void bloquear(){ //Este mtodo nos permitir deshabilitar nuestros campos para no ser
modificados por error.
CODIGO.setEnabled(false);
// Realizar esto para los dems campos nombre,apellido,ciudad,telfono.
NUEVO.setEnabled(true); //Este debe est habilitado para el momento de ingresar un
nuevo registro.
GUARDAR.setEnabled(false);
CANCELAR.setEnabled(false);
}
void desbloquear(){ // Permite habilitar los campos
CODIGO.setEnabled(false); //Debe quedar siempre falso no vamos a realizar
modificaciones.
NOMBRE.setEnabled(true); lo realizamos para apellido,ciudad,telfono.
NUEVO.setEnabled(false);
GUARDAR.setEnabled(true);
CANCELAR.setEnabled(true);
}
//Creamos el ActionPerformed para los botones nuevo,cancelar bloquea los campos y
salir.
private void NUEVOActionPerformed(java.awt.event.ActionEvent evt) {
desbloquear();// llamamos al mtodo
NOMBRE.requestFocus(); //Le indicamos que inicie campo

nombre

limpiar(); //llamamos al mtodo para limpiar los campos


}
Creamos el ActionPerformed para el botn GUARDAR
conectar basedatos = new conectar();// llamamos a nuestro objeto conectar y le
declaramos una variable
Connection vc = basedatos.conexion(); // Creamos una variable de conexin. Con la
variable basedatos y nuestro mtodo conexin.

String nombre,apellido,ciudad,telefono; //creamos las variables temporales que nos


almacenara lo que se tiene en las cajas de texto.
String sql = "";// creamos la sentencia sql.
nombre = NOMBRE.getText(); //ac pasamos lo que se almacena en el textfield en este
caso llamado NOMBRE a la variables temporales.
Realizar lo mismo para apellido,ciudad,telfono.
// creamos nuestra sentencia sql que nos permite insertar nuestro datos a la batos creada. sql
= "INSERT INTO clientes (nombre,apellido,ciudad,telefono)VALUES (?,?,?,?)";
try {
//El PreparedStatement nos permite definir una sentencia SQL base, que nos sirve para
modificar/insertar/buscar uno o varios registros.
//VC= objeto que realiza la conexin que creamos al inicio.
// nuevo= variable que usted la nombra libremente que debe tener en cuenta para ms
adelante.
try {
PreparedStatement nuevo = vc.prepareStatement(sql);
nuevo.setString(1,nombre); //asignamos en el 1 campo que se evalua ? me lo
almacene en la variable nombre que creamos anterior mente.
//REALIZAMOS LO MISMO PARA(apellido,ciudad,telfono);
int registro=nuevo.executeUpdate(); // creamos la variable registro que nos
contara cuantos registro se almacenaron en nuestro Statement llamado nuevo al
momento de ejecutarse.
if (registro>0){
JOptionPane.showMessageDialog(null,"REGISTRO GUARDADO CON EXITO");
bloquear(); //llamamos a los mtodos bloquear
}
Creamos el ActionPerformed para el botn GUARDAR
conectar basedatos = new conectar();// llamamos a nuestro objeto conectar y le
declaramos una variable
Connection vc = basedatos.conexion(); // Creamos una variable de conexin. Con la
variable basedatos y nuestro mtodo conexin.
String nombre,apellido,ciudad,telefono; //creamos las variables temporales que nos
almacenara lo que se tiene en las cajas de texto.

String sql = "";// creamos la sentencia sql.


nombre = NOMBRE.getText(); //ac pasamos lo que se almacena en el textfield en este
caso llamado NOMBRE a la variables temporales.
Realizar lo mismo para apellido,ciudad,telfono.
// creamos nuestra sentencia sql que nos permite insertar nuestro datos a la batos creada. sql
= "INSERT INTO clientes (nombre,apellido,ciudad,telefono)VALUES (?,?,?,?)";
try {
//El PreparedStatement nos permite definir una sentencia SQL base, que nos sirve para
modificar/insertar/buscar uno o varios registros.
//VC= objeto que realiza la conexin que creamos al inicio.
// nuevo= variable que usted la nombra libremente que debe tener en cuenta para ms
adelante.
try {
PreparedStatement nuevo = vc.prepareStatement(sql);
nuevo.setString(1,nombre); //asignamos en el 1 campo que se evalua ? me lo
almacene en la variable nombre que creamos anterior mente.
//REALIZAMOS LO MISMO PARA(apellido,ciudad,telfono);
int registro=nuevo.executeUpdate(); // creamos la variable registro que nos
contara cuantos registro se almacenaron en nuestro Statement llamado nuevo al
momento de ejecutarse.
if (registro>0){
JOptionPane.showMessageDialog(null,"REGISTRO GUARDADO CON EXITO");
bloquear(); //llamamos a los mtodos bloquear

Borramos su contenido /cuadro de dialogo personalizador/columnas/delete.


Creamos el mtodo cargar por tal razn debemos colocar JTABLE la cual llamaremos
tablaclientes.

void cargar(String valor){ //reciba un valor que nos permita filtrar


String [] titulos = {"codigo","nombre","apellido","ciudad","telefono"};// creamos los
ttulos de nuestra tabla
String [] registros = new String[5]; // creamos un arreglo de acuerdo al nmero de
campos a utilizar.
//creamos una sentencia sql.
String sql = "SELECT * FROM clientes where CONCAT(nombre,' ',apellido) LIKE
'%"+valor+"%'"; //filtra la informacin por nombre y cliente al valor asignado.
modelo = new DefaultTableModel(null,titulos); //al modelo que creamos vamos
asignarle los titulos
conectar basedatos = new conectar();// llamamos a la conexin BD
Connection vc = basedatos.conexion();

try {
Statement op = vc.createStatement();//creamos un Statemen para ejecutar nuesta
consulta.
ResultSet rs = op.executeQuery(sql);// creamos una variable resulset ya que esta
consulta va tener resultados al realizar la conexin a bd.
// se crea un while que nos permita insertar nuestros registro a nuestra tabla clientes while
(rs.next()){
registros[0]=rs.getString("codigo");
// Esto lo realizamos para nombre,apellido,ciudad,telfono.
modelo.addRow(registros);// aqu indicamos que se agregue nuestros registros.
}
tablaclientes.setModel(modelo);// indicamos a nuestra tablaclientes se aplique
nuestro modelo.
} catch (SQLException ex) {
}
}
Colocamos un botn BUSCAR y un TEXT FIELD los cuales llamaremos
Buscar-buttom Txtbuscartext field Mostrar-buttom
Creamos el mtodo buscar
private void BUSCARActionPerformed(java.awt.event.ActionEvent evt) {
cargar(TXTBUSCAR.getText()); llamamos el mtodo cargar y se realice la bsqueda por los
parmetros indicados de nombre, apellido.
}
Creamos un men emergente POPU MENU(MODIFICAR) agregar dos tem
(modificar,eliminar).

Creamos el mtodo modificar al tem del men.


private void modificarActionPerformed(java.awt.event.ActionEvent evt) {
int fila = tablaclientes.getSelectedRow(); creamos una variable fila que nos va
permite seleccionar el campo a modificar.

if (fila>=0){
CODIGO.setText(tablaclientes.getValueAt(fila,0).toString()); // nos permite Mostrar la
informacin de este campo.
Realizar para los dems campos nombre,apellido,ciudad,telfono. desbloquear();
// llamamos al mtodo desbloquear para realizar los ajustes
necesarios.
}
else
JOptionPane.showMessageDialog(null,"NO SELECCIONO FILA");
}
Creamos el mtodo actualizar del botn para que este actualice los cambios en la base de
datos.
private void ACTUALIZARActionPerformed(java.awt.event.ActionEvent evt) {
conectar basedatos = new conectar();
Connection vc = basedatos.conexion();
try {

PreparedStatement opc = vc.prepareStatement("UPDATE clientes SET


nombre='"+NOMBRE.getText()+"',apellido='"+APELLIDO.getText()+"',ciudad='"+CIUDAD.
getText()+"',ciudad='"+CIUDAD.getText()+"'WHERE codigo='"+CODIGO.getText()+"'");
opc.executeUpdate();
cargar("");

} catch (SQLException ex) {


System.out.printf(ex.getMessage());
}
}
Creamos el mtodo eliminar al tem del men.

private void eliminarActionPerformed(java.awt.event.ActionEvent evt) {


conectar basedatos = new conectar(); Connection

vc = basedatos.conexion(); int fila =


tablaclientes.getSelectedRow(); String cod="";
cod=tablaclientes.getValueAt(fila,0).toString();
try {
PreparedStatement nuevo = vc.prepareStatement("DELETE FROM clientes
WHERE codigo='"+cod+"'");
nuevo.executeUpdate(); cargar("");

} catch (SQLException ex) {

}
}

realizar para tabla producto mysql y cree


su respetivo formulario.
Cdigo producto
Nombre del producto
Valor del producto
Marca del producto

You might also like