Citation preview

Clase Conexion a Base de Datos package PAQUETE_QUE_USARA_ESTA_CLASE ; import java.sql.*; /** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class conectate { static String bd = "NOMBRE_BASE_DE_DATOS"; static String login = "USUARIO"; static String password = "PASSWORD"; static String url = "jdbc:mysql://localhost/"+bd; Connection conn = null; public conectate() { try{ Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url,login,password); if (conn!=null){ System.out.println("Conección a base de datos "+bd+". listo"); } }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } public Connection getConnection(){ return conn; } public void desconectar(){ conn = null; } }

Probando la clase "conectate.java"

package contactos; /** * @web http://jc-mouse.blogspot.com/ * @author mouse */ public class persona { conectate con; public persona (){ con = new conectate(); } } Ahora en el Main.java, colocamos el siguiente codigo:

package contactos; /** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class Main { public static void main(String[] args) { persona p = new persona(); p.con.desconectar(); } }

Sentencia SQL en netbeans Continuando con el post "Probando la clase conectate.java", ahora daremos una nueva funcionalidad a nuestra clase "persona.java", que es la de añadir nuevos registros a nuestra tabla "persona". Modificaremos la clase "persona.java" con el siguiente codigo: package contactos; import java.sql.*; /** * @web http://jc-mouse.blogspot.com/ * @author mouse */ public class persona { conectate con; public persona (){ con = new conectate(); } /*Añade un nuevo registro*/ public void NuevaPersona(String name, String ap, String am, String mail){ try { PreparedStatement pstm = con.getConnection().prepareStatement("insert into " + "persona(Nombre, appPaterno, appMaterno, mail) " + " values(?,?,?,?)"); pstm.setString(1, name); pstm.setString(2, ap); pstm.setString(3, am); pstm.setString(4, mail); pstm.execute(); pstm.close(); }catch(SQLException e){ System.out.println(e); } } }

Ahora que pudimos manipular la base de datos con la "insercion" de nuevos registros, ahora necesitamos extraer esos registros para poder verlos, modificaremos la clase "persona.java" para añadir la funcion "getDatos()".

package contactos; import java.sql.*; /** * @web http://jc-mouse.blogspot.com/ * @author mouse */ public class persona { conectate con; public persona (){ con = new conectate(); } /*Añade un nuevo registro*/ public void NuevaPersona(String name, String ap, String am, String mail){ try { PreparedStatement pstm = con.getConnection().prepareStatement("insert into " + "persona(Nombre, appPaterno, appMaterno, mail) " + " values(?,?,?,?)"); pstm.setString(1, name); pstm.setString(2, ap); pstm.setString(3, am); pstm.setString(4, mail); pstm.execute(); pstm.close(); }catch(SQLException e){ System.out.println(e); } } /*obtenemos todos los datos de la tabla*/ public Object [][] getDatos(){ int x = 0; //obtenemos la cantidad de registros existentes en la tabla try{ PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count(1) as total FROM persona "); ResultSet res = pstm.executeQuery(); res.next(); x = res.getInt("total"); res.close(); }catch(SQLException e){ System.out.println(e); } Object[][] s = new String[x][2]; //realizamos la consulta sql y llenamos los datos en "Object" try{ PreparedStatement pstm = con.getConnection().prepareStatement("SELECT " + " id, Nombre " + " FROM persona" + " ORDER BY id "); ResultSet res = pstm.executeQuery(); int i = 0; while(res.next()){ String estCodigo = res.getString("id"); String estNombre = res.getString("nombre"); s[i][0] = estCodigo; s[i][1] = estNombre; i++; }

res.close(); }catch(SQLException e){ System.out.println(e); } return s; } } La nueva funcion GetDatos() esta definida como Object [][], tambien podemos definirla como String[][], la funcion esta dividida en dos partes, la primera encargada de realizar una consulta para conocer el numero de registros existentes y gurdarla en la variable "registros", la segunda parte de la funcion utilizando la variable "registros" crea un objeto con esas dimensiones y realiza la consulta para extraer los datos y colocarlas en la variable "data[][]" que es la que retorna. el codigo del Main, debe quedar asi:

package contactos; /** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class Main { public static void main(String[] args) { persona p = new persona(); Object [][] sc ; sc = p.getDatos(); for(int i=0;i -1){ txtname.setText(String.valueOf(tabla.getValueAt(fila, 1))); txtpaterno.setText(String.valueOf(tabla.getValueAt(fila, 2))); txtmaterno.setText(String.valueOf(tabla.getValueAt(fila, 3))); txtmail.setText(String.valueOf(tabla.getValueAt(fila, 4))); } }

En la clase persona.java, añadiremos la nueva funcion deletePersona(), dentro la cual colocaremos la instruccion SQL, ejecutaremos la sentencia y cerramos.

public void deletePersona(String cod){ try { PreparedStatement pstm = con.getConnection().prepareStatement("delete from persona where id = ?"); pstm.setString(1, cod); pstm.execute(); pstm.close(); }catch(SQLException e){ System.out.println(e); } }

Ahora en el JFrame correspondiente, al boton evento ActionPerformded, copias el siguiente codigo.

que

creamos

"cmdEliminar",

le

añadimos

el

private void cmdEliminarActionPerformed(java.awt.event.ActionEvent evt) { if (fila > -1){ String codigo = String.valueOf(tabla.getValueAt(fila, 0)); p.deletePersona(codigo); updateTabla(); fila=-1; } }

Este código lo que hace es revisar si la variable "fila" contiene un valor diferente a "-1",esto sucede cuando se realiza un clic sobre el objeto "tabla", si esto es cierto, quiere decir que tenemos una fila seleccionada, por lo tanto procedera a extraer el codigo correspondiente y con este codigo hara un llamado a deletePersona(codigo), elimina el registro y reinicia el valor de fila a -1 para evitar inconvenientes.

Una ultima funcionalidad que le falta a nuestro miniproyecto de base de datos, es la de poder "modificar" los datos leidos de la base de datos, para despues poder guardar esos cambios, para ello: - Añadimos un nuevo jButton a nuestro proyecto. - En nuestra clase, persona.java añadimos el codigo:

public void updatePersona(String id, String name, String paterno, String materno, String mail){ try { PreparedStatement pstm = con.getConnection().prepareStatement("update persona " + "set Nombre = ? ," + "appPaterno = ? ," + "appMaterno = ? ," + "mail = ? " + "where id = ? "); pstm.setString(1, name); pstm.setString(2, paterno); pstm.setString(3, materno); pstm.setString(4, mail); pstm.setString(5, String.valueOf(id)); pstm.execute(); pstm.close(); }catch(SQLException e){ System.out.println(e); } } Explicacion: Esta nueva funcion, recibe como parametros el "id" codigo del registro que se modificara, ademas de los datos necesarios para realizar la consulta, como el nombre, apellido paterno , materno y el mail de la persona. Luego se realiza una consulta SQL pasando esos datos. Ya en el jFrame de nuestro proyecto, al nuebo jButton que creamos, añadimos el siguiente codigo:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { if (fila > -1){ String codigo = String.valueOf(tabla.getValueAt(fila, 0)); String name = txtname.getText(); String pat = txtpaterno.getText(); String mat = txtmaterno.getText(); String mail = txtmail.getText(); p.updatePersona(codigo, name, pat, mat, mail); updateTabla(); } } Lo unico que hace es capturar los datos del JTable, asignarlas a variables y llamar a la funcion updatePersona().