Você está na página 1de 9

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<sc.length ;i++){
System.out.println("> " + sc[i][0] + " - " + sc[i][1]);
}
p.con.desconectar();
}
}

Paso 2:
Modificaremos la clase "persona.java", mas concretamente la funcion "getDatos()", los cambios que hicimos
fueron para poder leer todos los datos de nuestra tabla

public Object [][] getDatos(){


int registros = 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();
registros = res.getInt("total");
res.close();
}catch(SQLException e){
System.out.println(e);
}

Object[][] data = new String[registros][5];


//realizamos la consulta sql y llenamos los datos en "Object"
try{
PreparedStatement pstm = con.getConnection().prepareStatement("SELECT "
+
" id, Nombre, appPaterno, appMaterno, mail " +
" 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");
String estpaterno = res.getString("appPaterno");
String estmaterno = res.getString("appMaterno");
String estmail = res.getString("mail");
data[i][0] = estCodigo;
data[i][1] = estNombre;
data[i][2] = estpaterno;
data[i][3] = estmaterno;
data[i][4] = estmail;
i++;
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}

Paso 3:
a nuestro "tablaform", le añadimos "import javax.swing.table.DefaultTableModel;", al jframe le aññadimos
la funcion WindowOpened y colocaremos el siguiente codigo:

private void formWindowOpened(java.awt.event.WindowEvent evt) {


//objeto para almacenar datos
Object[][] dtPer;
String[] columNames = {"id","Nombre","ap. Paterno","ap. Materno", "E-
Mail"};
// se utiliza la funcion
dtPer = p.getDatos();
// se colocan los datos en la tabla
DefaultTableModel datos = new
DefaultTableModel(dtPer,columNames);
tabla.setModel(datos);
}

Continuando con nuestro mini-proyecto, ahora llego la hora de agregar/eliminar/actualizar registros a la base
de datos de forma visual.

Nuestro proyecto se llama "contactos", las clases que utilizamos son conectate.java y persona.java, la base de
datos (dbcontactos) y tabla (persona) que usamos las puedes ver aqui.

Clase persona.java

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 registros = 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();
registros = res.getInt("total");
res.close();
}catch(SQLException e){
System.out.println(e);
}

Object[][] data = new String[registros][5];


//realizamos la consulta sql y llenamos los datos en "Object"
try{
PreparedStatement pstm = con.getConnection().prepareStatement("SELECT "
+
" id, Nombre, appPaterno, appMaterno, mail " +
" 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");
String estpaterno = res.getString("appPaterno");
String estmaterno = res.getString("appMaterno");
String estmail = res.getString("mail");
data[i][0] = estCodigo;
data[i][1] = estNombre;
data[i][2] = estpaterno;
data[i][3] = estmaterno;
data[i][4] = estmail;
i++;
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}
}

Paso 2: declara import javax.swing.table.DefaultTableModel; ya sabes donde

Paso 3: coloca estas lineas de codigo.

/**
* @param args the command line arguments
*/
persona p= new persona();
Object[][] dtPer;
int fila = -1;

Paso 4: Añade estos dos metodos, el primero updateTabla(), actualiza el objeto tabla cada vez que se lo
invoca, el metodo nuevo(), su funcion es la de limpiar los jTextFields para añadir nuevos datos.

private void updateTabla(){


String[] columNames = {"id","Nombre","ap. Paterno","ap. Materno", "E-
Mail"};
// se utiliza la funcion
dtPer = p.getDatos();
// se colocan los datos en la tabla
DefaultTableModel datos = new
DefaultTableModel(dtPer,columNames);
tabla.setModel(datos);
}

private void nuevo(){


txtname.setText("");
txtpaterno.setText("");
txtmaterno.setText("");
txtmail.setText("tu_correo@hotmail");
}

Paso 5: añade el evento WindowOpenend al jFrame, el evento ActionPerformed a los objetos jButton y el
evento MouseClicked al objeto jTable, añade el codigo que se ve abajo

private void formWindowOpened(java.awt.event.WindowEvent evt)


{
updateTabla();
nuevo();
}

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


String name = txtname.getText();
String pat = txtpaterno.getText();
String mat = txtmaterno.getText();
String mail = txtmail.getText();
p.NuevaPersona(name, mat, pat, mail);
updateTabla();
}

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


nuevo();
}

private void tablaMouseClicked(java.awt.event.MouseEvent evt) {


fila = tabla.rowAtPoint(evt.getPoint());
if (fila > -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 que creamos "cmdEliminar", le añadimos el


evento ActionPerformded, copias el siguiente codigo.

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().

Você também pode gostar