Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

38
Clase java para recorrer registros de tabla SQL Server con botones primero, anterior, siguiente y ultimo 24 MAYO 2011 77 COMENTARIOS Clase java para recorrer registros de tabla SQL Server con botones primero, anterior, siguiente y ultimo. El objetivo de esta entrada de blog es mostrar una clase diseñada por mi para facilitar la navegacion por los registros de una tabla. Se me ocurrio esto debido a que en muchas ocasiones en los programas necesitamos recorrer los registros de una tabla con los tipicos botones: Primero Permite ir al primer registro de la tabla. Anterior Permite ir al anterior registro. Siguiente Permite ir al siguiente registro. Ultimo Permite ir al ultimo registro. La siguiente imagen muestra un ejemplo clasico donde se requieren estos botones (los botones con flechas verdes): Ventana con botones de navegacion de registros.

Transcript of Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

Page 1: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

Clase java para recorrer registros de tabla SQL Server con botones primero, anterior, siguiente y ultimo

24 MAYO 2011 77 COMENTARIOS

Clase java para recorrer registros de tabla SQL Server con botones primero, anterior, siguiente y ultimo. El

objetivo de esta entrada de blog es mostrar una clase diseñada por mi para facilitar la navegacion por los

registros de una tabla. Se me ocurrio esto debido a que en muchas ocasiones en los programas necesitamos

recorrer los registros de una tabla con los tipicos botones:

Primero Permite ir al primer registro de la tabla.

Anterior Permite ir al anterior registro.

Siguiente Permite ir al siguiente registro.

Ultimo Permite ir al ultimo registro.

La siguiente imagen muestra un ejemplo clasico donde se requieren estos botones (los botones con flechas

verdes):

Ventana con botones de navegacion de registros.

Page 2: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

Como se puede imaginar con ayuda de estos botones nos podemos colocar en cualquier registro de la tabla y

una vez posicionados en el registro deseado se pueden usar otros botones para modificar o eliminar el

registro. Bueno sin mas preambulos muestro el codigo de la clase:

GonzaBD.java

El truco de esta clase es almacenar en un array todos los campos llave de la tabla que se desee

manipular (por cada tabla se debe crear un nuevo objeto de esta clase). Al llamar al metodo primero() con

ayuda de una variable se accede al primer elemento del arreglo de llaves primarias. Al llamar al metodo

ultimo() con ayuda de una variable se accede al ultimo elemento del arreglo de llaves primarias. Al llamar al

metodo siguiente() con ayuda de una variable; si por ejemplo estamos en la fila 5, se accede al elemento 5 +1,

del arreglo de llaves primarias. Despues se realiza un Select hacia la tabla y los datos quedan en un Objeto

Resultset (llamado rs) que es local a esta clase. Bueno a continuacion muestro el codigo:

/*

* Instituto Tecnologico de Zacatepec

* Descripcion: Clase que contiene metodos para recorrer los registros de una

tabla

* hacia el primer, anterior,

siguiente o ultimo registro

* Archivo: GonzaBD.java

* author Gonzalo Silverio [email protected]

* fuente: http://gonzasilve.wordpress.com

*/

import java.sql.*;

public class GonzaBD

{

String strSentenciaSQL = "";

String strCadenaConexion = "";

String strOrdenarPor = "";

String strCampoLLave = "";

String strTabla = "";

Page 3: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

String strArrayCamposLlave[];

int intArrayCamposLlave[];

//Los posibles tipos del campo llave son cadena y entero

//Por defecto el campo llave es de tipo cadena

String strTipoCampoLlave = "cadena";

int intTotalRegistros = 0,intFilaActual = 0;

String strDriverMySQL ="com.mysql.jdbc.Driver";

String strDriverPostgres ="org.postgresql.Driver";

String strDriverSqlServer ="net.sourceforge.jtds.jdbc.Driver";

String strManejador = "mysql";

String strBaseDatos = "BD";

String strServidor = "localhost";

String strUsuario = "usuario";

String strPassword = "password";

String strControlador = strDriverMySQL;

String strPuerto = "3306";

private static Connection con = null;

Statement st;

ResultSet rs;

Page 4: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

public GonzaBD()

{

}

//se mueve a la primera fila y devuelve true si se pudo, false sino se pudo

ir a la primera fila

public boolean primero()

{

try

{

intFilaActual = 0;

if( strTipoCampoLlave.equals("cadena") )

rs = ejecutarConsulta("SELECT * FROM " +

strTabla + " WHERE "+strCampoLLave+"='"+strArrayCamposLlave[intFilaActual]+"'");

else

rs = ejecutarConsulta("SELECT * FROM " +

strTabla + " WHERE "+strCampoLLave+"="+intArrayCamposLlave[intFilaActual]);

if( rs.next() )

return true;

return false;

}

catch ( SQLException e )

Page 5: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

{

e.printStackTrace();

return false;

}

}

//se mueve a la anterior fila y devuelve true si se pudo, false sino se pudo

ir a la anterior fila

public boolean anterior()

{

try

{

intFilaActual--;

if(intFilaActual<0)

intFilaActual=0;

if( strTipoCampoLlave.equals("cadena") )

rs = ejecutarConsulta("SELECT * FROM " +

strTabla + " WHERE "+strCampoLLave+"='"+strArrayCamposLlave[intFilaActual]+"'");

else

rs = ejecutarConsulta("SELECT * FROM " +

strTabla + " WHERE "+strCampoLLave+"="+intArrayCamposLlave[intFilaActual]);

if( rs.next() )

return true;

Page 6: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

return false;

}

catch ( SQLException e )

{

e.printStackTrace();

return false;

}

}

//se mueve a la siguiente fila y devuelve true si se pudo, false sino se pudo

ir a la siguiente fila

public boolean siguiente()

{

try

{

intFilaActual++;

if(intFilaActual>intTotalRegistros-1)

intFilaActual=intTotalRegistros-1;

if( strTipoCampoLlave.equals("cadena") )

rs = ejecutarConsulta("SELECT * FROM " +

strTabla + " WHERE "+strCampoLLave+"='"+strArrayCamposLlave[intFilaActual]+"'");

else

rs = ejecutarConsulta("SELECT * FROM " +

strTabla + " WHERE "+strCampoLLave+"="+intArrayCamposLlave[intFilaActual]);

Page 7: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

if( rs.next() )

return true;

return false;

}

catch ( SQLException e )

{

e.printStackTrace();

return false;

}

}

//se mueve a la ultima fila y devuelve true si se pudo, false sino se pudo ir

a la ultima fila

public boolean ultimo()

{

try

{

intFilaActual = intTotalRegistros-1;

if( strTipoCampoLlave.equals("cadena") )

rs = ejecutarConsulta("SELECT * FROM " +

strTabla + " WHERE "+strCampoLLave+"='"+strArrayCamposLlave[intFilaActual]+"'");

else

rs = ejecutarConsulta("SELECT * FROM " +

strTabla + " WHERE "+strCampoLLave+"="+intArrayCamposLlave[intFilaActual]);

Page 8: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

if( rs.next() )

return true;

return false;

}

catch ( SQLException e )

{

e.printStackTrace();

return false;

}

}

//Obtiene el controlador del manejador mysql o postgres

public String obtenerDriverManejador(String manejador)

{

if(manejador.equals("sqlserver"))

//Si el manejador es sql server

return strDriverSqlServer;

else if(manejador.equals("mysql"))

//Si el manejador es mysql

return strDriverMySQL;

else if(manejador.equals("postgres"))

//Si el manejador es postgres

return strDriverPostgres;

Page 9: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

//en caso d k no sea ninguno devuelve el de MySQL

return strDriverMySQL;

}

//Conecta a la BD con los datos por default

public boolean conectarBD() throws SQLException

{

try

{

return

conectarServidor(strManejador,strServidor,strUsuario,strPassword,strBaseDatos,str

Controlador);

}

catch ( SQLException e )

{

e.printStackTrace();

return false;

}

}

//Conecta a la BD con los datos especificados

public boolean conectarBD(String usuario, String password, String BD, String

manejador) //throws SQLException

{

boolean ress;

try

Page 10: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

{

strControlador = obtenerDriverManejador(manejador);

strUsuario = usuario;

strPassword = password;

strBaseDatos = BD;

strManejador = manejador;

ress =

conectarServidor(manejador,strServidor,usuario,password,BD,strControlador);

return ress;

}

catch ( SQLException e )

{

e.printStackTrace();

return false;

}

}

//Conecta a la BD con los datos del usuario, bd y password especificados,

para los demas toma los k estan por default

public boolean conectarBD(String usuario, String password, String BD )//

throws SQLException

{

boolean ress;

try

{

strUsuario = usuario;

Page 11: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

strPassword = password;

strBaseDatos = BD;

ress =

conectarServidor(strManejador,strServidor,usuario,password,BD,strControlador);

return ress;

}

catch ( SQLException e )

{

e.printStackTrace();

return false;

}

}

//permite especificar el campo por el que se van a ordenar los registros

public void ordenarPor(String campo)

{

strOrdenarPor = campo;

}

//Realiza una conexion a sqlserver, mysql o postgres con los datos

especificados

public boolean conectarServidor(String manejador,String servidor,String

usuario,String pw,String bd, String driver) throws SQLException

{

if(manejador.equals("sqlserver"))

//Si el manejador es sql server

Page 12: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

{

try

{

Class.forName(driver);

strCadenaConexion =

"jdbc:jtds:sqlserver://"+servidor+"/"+bd+";instance=SQLSERVEREXPRESS;";

con =

DriverManager.getConnection(strCadenaConexion,usuario,pw);

if (con == null )

return false;

return true;

}

catch(SQLException sqlex)

{

sqlex.printStackTrace();

return false;

}

catch(Exception e)

{

e.printStackTrace();

return false;

}

}

else if(manejador.equals("mysql"))

//Si el manejador es mysql

{

Page 13: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

try

{

Class.forName(driver);

strCadenaConexion = "jdbc:mysql://"+servidor+"/"+bd;

con =

DriverManager.getConnection(strCadenaConexion,usuario,pw);

if (con == null )

return false;

return true;

}

catch(SQLException sqlex)

{

sqlex.printStackTrace();

return false;

}

catch(Exception e)

{

e.printStackTrace();

return false;

}

}

else if(manejador.equals("postgres"))

//Si el manejador es postgress

{

Page 14: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

try

{

Class.forName(driver);

strCadenaConexion = "jdbc:postgresql://"+servidor+":5432/"+bd;

con = DriverManager.getConnection(strCadenaConexion,usuario,pw);

if (con == null )

return false;

return true;

}

catch(SQLException sqlex)

{

sqlex.printStackTrace();

return false;

}

catch(Exception e)

{

e.printStackTrace();

return false;

}

}

return false;

Page 15: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

}

//Ejecuta un SELECT y devuelve el Resultset con los resultados

public ResultSet ejecutarConsulta(String cadSQ) throws SQLException

{

rs = null;

if( ! strOrdenarPor.equals("") )

cadSQ += " ORDER BY " +strOrdenarPor;

try

{

rs = st.executeQuery(cadSQ);

return rs;

}

catch(SQLException sqlex)

{

sqlex.printStackTrace();

return rs;

}

}

public void obtenerCamposLlave()

{

Page 16: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

obtenerCamposLlave(strTabla);

}

//Si el campo llave es de tipo entero guarda los campos llave en un

arreglo de enteros

//Si el campo llave es de tipo cadena guarda los campos llave en un

arreglo de Strings

public void obtenerCamposLlave(String tabla)

{

int c=0;

try

{

rs = ejecutarConsulta("SELECT * FROM " + tabla);

while(rs.next())

c++;

intTotalRegistros = c;

strArrayCamposLlave = new String[intTotalRegistros];

intArrayCamposLlave = new int[intTotalRegistros];

cerrar(rs); //Cerrar consulta anterior

//Ejecutar nuevamente la consulta

rs = ejecutarConsulta("SELECT * FROM " + tabla);

rs.next(); //Moverse al primer registro

c=0;

Page 17: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

do

{ //determina el tipo del campo

llave y en base a eso guarda en el array correspondiente

if( strTipoCampoLlave.equals("cadena") )

strArrayCamposLlave[c] =

rs.getString(strCampoLLave);

else

intArrayCamposLlave[c] =

rs.getInt(strCampoLLave);

c++;

}while( rs.next() );

}

catch(SQLException sqlex)

{

sqlex.printStackTrace();

}

}

// Cierra un objeto Resultset

public static void cerrar(ResultSet rs)

{

try

{

Page 18: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

rs.close();

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

// cierra un objeto Statemet

public static void cerrar(Statement st)

{

try

{

st.close();

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

// Cierra un objeto Connection

public static void cerrar(Connection con)

{

Page 19: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

try

{

con.close();

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

//Permite especificar cual es el campo llave de la tabla

public void setCampoLlave(String campo)

{

strCampoLLave = campo;

}

//Permite especificar cual es el campo llave y su tipo, de la tabla

public void setCampoLlave(String campo, String tipo)

{

strCampoLLave = campo;

strTipoCampoLlave = tipo;

}

public void setTipoCampoLlave(String tipo)

Page 20: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

{

strTipoCampoLlave = tipo;

}

//Especifica la tabla sobre la k se va a trabajar

public void setTabla(String tabla)

{

try

{

strTabla = tabla;

st=con.createStatement();

}

catch(SQLException ex)

{

ex.printStackTrace();

}

}

} //Fin de la clase

Como se puede observar en la linea 229 de la clase GonzaBD.java estoy usando un nombre de instancia

llamadoSQLSERVEREXPRESS Esta clase se podria editar para recibir tambien como parametro el nombre

de la instancia de SQL Server que se desee utilizar, se queda de tarea.

Lo interesante de esta clase es que esta preparada para recorrrer los registros de tablas que esten creadas

en cualquera de los manejadores SQL Server, MySQL o de Postgres, obviamente que los .jar de los

JConnector de dichos DBMS  deben estar copiados en C:\Program Files\Java\jdk1.6.0_23\jre\lib\ext, Lo que

esta en negrita lo e resaltado debido a que la version del JVM puede cambiar segun la que tengas instalada.

Los JConnector que e usado para probar esta clase son los siguientes (puedes dar click en el enlace para

descargarlo sino lo tienes).

Page 21: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

JConnector de SQL Server: jtds-1.2.5.jar

JConnector de Postgres: postgresql-9.1-901.jdbc4.jar

JConnector de MySQL: mysql-connector-java-5.1.18-bin.jar

Para ejemplificar el uso de la clase anterior e usado una tabla que esta en SQL Server. Los parametros de

conexion son:

Manejador de Base de datos (DBMS): SQL Server 2005 Express

Base de datos: prueba

Tabla: alumnos

Usuario: sa

Password: root

El Script para crear la tabla alumnos en SQL Server es el siguiente:

create table alumnos(matricula int, nombre char(50), apellidos char(100), edad

int, peso decimal(10,2),sexo char(1), PRIMARY KEY(matricula) );

La imagen de la tabla ya creada en SQL Server se ve asi:

Tabla alumnos en SQL Server

Page 22: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

DIAGRAMA UML DE LA CLASE gonzaBD 

Diagrama UML de la clase gonzaBD

BREVE EXPLICACION DE LOS ATRIBUTOS DE LA CLASE gonzaBD:

Atributo Descripcion

intfilaActual

Contiene un número que se usa como índice para acceder a una llave

primaria dentro del arreglo strArrayCamposLlave o el arreglo

strArrayCamposLlave (dependiendo de si la llave primaria es de tipo

cadena o tipo entero, respectivamente). Este atributo contiene el número

actual de fila-1.

strArrayCamposLlave

[]

Arreglo que contiene las llaves primarias de la tabla en caso de que el tipo

de dato del campo llave sea Cadena.

intArrayCamposLlave

[]

Arreglo que contiene las llaves primarias de la tabla en caso de que el tipo

de dato del campo llave sea Entero.

rs

Contiene los datos de la fila actual mostrandose. Cada vez que se manda

a llamar al método primero(), anterior(), siguiente() o ultimo() se realiza

una consulta y este atributo (tipo Resultset) se actualiza con los campos

de la nueva fila.

COMO SE USA LA CLASE gonzaBD

A continuacion voi a poner un fragmento de codigo con la intencion mostrar los pasos a realizar para usar

correctamente la clase.

//Crear un objeto de esta clase

GonzaBD a = new GonzaBD();

//AHORA SE DEBE REALIZAR LO SIGUIENTE EN EL MISMO ORDEN…

//Primeramente se debe indicar especificar cual es la llave primaria de la tabla

y su tipo

a.setCampoLlave("matricula","entero");

Page 23: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

//Se de desea se puede indicar que si se desean ordenar los registros de la tabla

por un campo, //este paso es opcional en todo caso sino se realiza, no se ordenan

por ningún campo

a.ordenarPor("nombre");

//A continuación usamos un metodo sobrecargado para conectarse al DBMS, aquí es

donde //indicamos a que manejador se debe accesar

a.conectarBD("sa","root","prueba","sqlserver");

//Una vez que ya estamos conectados se debe especificar la tabla que se va a

manipular

a.setTabla("alumnos");

//Ahora se manda a llamar al método que rellena el arreglo de llaves primarias

dentro de la clase; //dependiendo del tipo de dato del campo llave se rellena el

arreglo de Strings o el arreglo de //enteros.

a.obtenerCamposLlave();

//Ahora ya se puede llamar a cualquiera de los métodos primero(), anterior(),

siguiente() o ultimo()...

Despues de realizar lo anterior, para que el objeto rs se rellene con los datos de la primera fila se invoca al

metodo:

a.primero();

Después de que se invoco ese metodo, el atributo rs de la clase gonzaBD se quedara con los datos de la fila

1. Supongamos que la tabla “alumnos” contiene las siguientes filas, rs apuntara a la fila:

El atributo rs esta en la posicion de la primera fila.

Si inmediatamente despues se llama al método siguiente()

a.siguiente();

El atributo rs apuntara al siguiente registro despues del primero, es decir rs apuntara a la fila:

Page 24: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

El atributo rs apunta a los datos de la segunda fila

Y asi sucesivamente, una observación: si te fijas en el codigo de los metodos (siguiente() y anterior())

cuando se ha llegado a la ultima fila, es decir, si rs apunta al registro 4 y se ejecuta una llamada al

método siguiente() (se intenta accesar una fila después de la ultima); dicho método contiene

un ‘candado’ para detectar eso y siempre dejara a rs apuntando al ultimo registro. El

método anterior() igualmente tiene esa precaucion y siempre que se intente accesar a un registro antes del

primero automáticamente moverá a rs para que apunte a la primera fila. De esta manera no es posible

sobrepasar los limites (inferior ni superior) de filas de la tabla que se este manipulando.

Finalmente Para ilustrar el uso de la clase gonzaBD anterior he creado una ventana muy basica.

JfrPrincipal.java

Esta clase crea una ventana de formulario con 6 campos y los 4 botones; primero, anterior, siguiente y ultimo

en la parte inferior de dicha ventana. Es la misma clase que utilice para ilustrar como usar ventanas de

formulario en Java, pero la he modificado y adaptado para este ejemplo mas elaborado. Bueno ahora muestro

el codigo:

/*

* Instituto Tecnologico de Zacatepec

* Descripcion: Clase que crea una GUI para ilustrar el uso de la clase EasyBD

* Archivo: JfrPrincipal.java

* author: Gonzalo Silverio [email protected]

* fuente: http://gonzasilve.wordpress.com

*/

import javax.swing.*;

import java.awt.FlowLayout;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

Page 25: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

//Se usara para cambiar los Margenes de los botones

import java.awt.Insets;

//Para Manejo de BD

import java.sql.*;

public class JfrPrincipal extends JFrame

{

//Campos de texto y sus etiquetas

JLabel jlbMatricula; JTextField jtfMatricula;

JLabel jlbNombre; JTextField jtfNombre;

JLabel jlbApellidos; JTextField jtfApellidos;

JLabel jlbEdad; JTextField jtfEdad;

JLabel jlbPeso; JTextField jtfPeso;

JLabel jlbSexo; JComboBox jcbSexo;

//Botones de navegacion de los registros

JButton btnPrimero;

JButton btnAnterior;

JButton btnSiguiente;

JButton btnUltimo;

Box boxVCamposVentana; //Contiene todo los campos de texto (con su

respectiva etiqueta)

JPanel panBotones; //Contiene los botones Guardary Cancelar

Page 26: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

//Objeto de la clase que nos ayuda a navegar por los registros de la

tabla

GonzaBD bd = new GonzaBD();

JfrPrincipal(String strTitulo, int intAncho, int intAlto)

{

super(strTitulo);

this.setSize(intAncho, intAlto);

this.setResizable(false); //Ventana no redimensionable

this.setLocationRelativeTo(null); //Centrar ventana en

pantalla

//Box vertical por que los botones van a estar abajo

Box boxVContenidoVerticalVentana = Box.createVerticalBox();

crearCamposVentana();

crearBotones();

//Espacio del borde superior de la ventana al primer Campo

boxVContenidoVerticalVentana.add(Box.createVerticalStrut(30));

boxVContenidoVerticalVentana.add(boxVCamposVentana);

//Espacio entre el ultimo campo (sexo) y los botones Guardar y

Cancelar

boxVContenidoVerticalVentana.add(Box.createVerticalStrut(20));

boxVContenidoVerticalVentana.add(panBotones);

this.add(boxVContenidoVerticalVentana);

Page 27: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Conecta la Base de datos

conectarBD();

bd.primero(); //Posicionarse en el primer registro

rellenarCampos(); //Rellenar los campos con los

datos del primer registro

//ASIGNAR UN ESCUCHADOR PARA CADA BOTON DE NAVEGACION

//Boton Primero

btnPrimero.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent evt)

{

bd.primero();

rellenarCampos();

}

});

//Boton Anterior

btnAnterior.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent evt)

{

bd.anterior();

rellenarCampos();

Page 28: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

}

});

//Boton Siguiente

btnSiguiente.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent evt)

{

bd.siguiente();

rellenarCampos();

}

});

//Boton Ultimo

btnUltimo.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent evt)

{

bd.ultimo();

rellenarCampos();

}

});

} //Fin del constructor

Page 29: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

//Crea los campos de la ventana (cada caja tiene su correspondiente

etiqueta)

private void crearCamposVentana()

{

Box boxHMatricula = Box.createHorizontalBox();

jlbMatricula = new JLabel("Matricula "); jtfMatricula = new

JTextField(15);

boxHMatricula.add(Box.createHorizontalStrut(20));

boxHMatricula.add(jlbMatricula);

boxHMatricula.add(Box.createHorizontalStrut(14));

boxHMatricula.add(jtfMatricula);

JPanel panMatricula = new JPanel(new FlowLayout(FlowLayout.LEFT) );

panMatricula.add(boxHMatricula);

Box boxHNombre = Box.createHorizontalBox();

jlbNombre = new JLabel("Nombre "); jtfNombre = new JTextField(15);

boxHNombre.add(Box.createHorizontalStrut(20));

boxHNombre.add(jlbNombre);

boxHNombre.add(Box.createHorizontalStrut(20));

boxHNombre.add(jtfNombre);

JPanel panNombre = new JPanel(new FlowLayout(FlowLayout.LEFT) );

panNombre.add(boxHNombre);

Box boxHApellidos = Box.createHorizontalBox();

jlbApellidos = new JLabel("Apellidos "); jtfApellidos = new

JTextField(15);

Page 30: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

boxHApellidos.add(Box.createHorizontalStrut(20));

boxHApellidos.add(jlbApellidos);

boxHApellidos.add(Box.createHorizontalStrut(11));

boxHApellidos.add(jtfApellidos);

JPanel panApellidos = new JPanel(new FlowLayout(FlowLayout.LEFT) );

panApellidos.add(boxHApellidos);

Box boxHEdad = Box.createHorizontalBox();

jlbEdad = new JLabel("Edad "); jtfEdad = new JTextField(15);

boxHEdad.add(Box.createHorizontalStrut(20));

boxHEdad.add(jlbEdad);

boxHEdad.add(Box.createHorizontalStrut(40));

boxHEdad.add(jtfEdad);

JPanel panEdad = new JPanel(new FlowLayout(FlowLayout.LEFT) );

panEdad.add(boxHEdad);

Box boxHPeso = Box.createHorizontalBox();

jlbPeso = new JLabel("Peso "); jtfPeso = new JTextField(15);

boxHPeso.add(Box.createHorizontalStrut(20));

boxHPeso.add(jlbPeso);

boxHPeso.add(Box.createHorizontalStrut(40));

boxHPeso.add(jtfPeso);

JPanel panPeso = new JPanel(new FlowLayout(FlowLayout.LEFT) );

panPeso.add(boxHPeso);

Page 31: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

Box boxHSexo = Box.createHorizontalBox();

jlbSexo = new JLabel("Sexo "); jcbSexo = new JComboBox();

jcbSexo.addItem("Masculino");

jcbSexo.addItem("Femenino");

boxHSexo.add(Box.createHorizontalStrut(20));

boxHSexo.add(jlbSexo);

boxHSexo.add(Box.createHorizontalStrut(40));

boxHSexo.add(jcbSexo);

JPanel panSexo = new JPanel(new FlowLayout(FlowLayout.LEFT) );

panSexo.add(boxHSexo);

boxVCamposVentana = Box.createVerticalBox();

boxVCamposVentana.add(panMatricula);

boxVCamposVentana.add(Box.createVerticalStrut(10));

boxVCamposVentana.add(panNombre);

boxVCamposVentana.add(Box.createVerticalStrut(10));

boxVCamposVentana.add(panApellidos);

boxVCamposVentana.add(Box.createVerticalStrut(10));

boxVCamposVentana.add(panEdad);

boxVCamposVentana.add(Box.createVerticalStrut(10));

boxVCamposVentana.add(panPeso);

boxVCamposVentana.add(Box.createVerticalStrut(10));

boxVCamposVentana.add(panSexo);

Page 32: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

}

private void crearBotones()

{

Box boxHBotones = Box.createHorizontalBox();

btnPrimero = new JButton("|< Primero");

btnAnterior = new JButton("< Anterior");

btnSiguiente = new JButton("Siguiente >");

btnUltimo = new JButton("Ultimo >|");

//Cambiar los margenes de los botones

//Insets(margen_sup, margen_izq, margen_inf, margen_der)

btnPrimero.setMargin(new Insets(0, 2, 0, 2));

btnAnterior.setMargin(new Insets(0, 2, 0, 2));

btnSiguiente.setMargin(new Insets(0, 2, 0, 2));

btnUltimo.setMargin(new Insets(0, 2, 0, 2));

boxHBotones.add(btnPrimero);

boxHBotones.add(Box.createHorizontalStrut(20));

boxHBotones.add(btnAnterior);

boxHBotones.add(Box.createHorizontalStrut(20));

boxHBotones.add(btnSiguiente);

boxHBotones.add(Box.createHorizontalStrut(20));

boxHBotones.add(btnUltimo);

Page 33: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

panBotones = new JPanel(new FlowLayout(FlowLayout.CENTER) );

panBotones.add(boxHBotones);

}

//Conecta con la BD y devuelve true si se conecto correctamente

//false en cualquiero otro caso

public boolean conectarBD()

{

// Especificar cual es la llave primaria de la tabla y su tipo

bd.setCampoLlave("matricula","entero");

bd.ordenarPor("nombre"); //Ordena los registros de la tabla por este

campo

//Conecta con el usuario, pass, BD y dbms (manejador)

especificados

bd.conectarBD("sa","root","prueba","sqlserver");

//especifica la tabla sobre la que se va a manipular

bd.setTabla("alumnos");

//Dentro del objeto bd rellena un arreglo con las llaves

//primarias de la tabla que se esta manipulando

bd.obtenerCamposLlave();

return true;

}

Page 34: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

//Rellena los campos de texto con los datos del registro actual

public void rellenarCampos()

{

try

{

jtfMatricula.setText(aCadena(bd.rs.getInt("matricula")));

jtfNombre.setText(bd.rs.getString("nombre").trim ());

jtfApellidos.setText(bd.rs.getString("apellidos").trim ());

jtfEdad.setText(aCadena(bd.rs.getInt("edad")));

jtfPeso.setText(aCadena(bd.rs.getFloat("peso")));

jcbSexo.setSelectedItem( bd.rs.getString("sexo").equals("f") ?

"Femenino" : "Masculino" );

this.setTitle("Alumno "+(bd.intFilaActual+1)+" de

"+bd.intTotalRegistros);

}

catch( SQLException ex )

{

ex.printStackTrace();

}

}

//Recibe un numero entero y lo devuelve como Cadena (String)

private String aCadena(int num)

Page 35: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

{

return String.valueOf(num);

}

//Recibe un numero decimal y lo devuelve como Cadena (String)

private String aCadena(float num)

{

return String.valueOf(num);

}

private void mostrar()

{

this.setVisible(true);

}

public static void main(String args[])

{

JfrPrincipal prueba1 = new JfrPrincipal("Recorrer registros de SQL Server

en Java",400,400);

prueba1.mostrar();

}

}

Y aqui una imagen de la ejecucion:

Page 36: Clase Java Para Recorrer Registros de Tabla SQL Server Con Botones Primero

Ejecucion de la clase que recorre registros de tabla de SQL Server.

Como decia anteriormente lo interesante es que si ahora deseamos que la tabla alumnos este creada

en MySQLo Postgres, entonces la creamos en dicho manejador (con ayuda del script que puse mas arriba) y

en la linea 216 de la clase JfrPrincipal.java, cambiamos los parametros de Conexion (usuario,pass,bd,

manejador) de dicho manejador, la clase automaticamente usara el Driver adecuado y se conectara a dicho

DBMS sin problemas.

Sin querer se hizo un poco largo este ejemplo, pero no era para mas, espero haber sido lo suficiente explicito

y no haber dejado muchas dudas, los ya avanzados en Java supongo que mi codigo lo habran digerido sin

problemas y los que empiezan de todas maneras pregunten sin compromiso, les aseguro que yo tambien soy

un novato y seguro hay alguna manera mas fina y elegante de hacer esto del recorrido de registros, solo es

una idea. . Y es que a la clase GonzaBD.java la simplifique y le quite mucho codigo para que quedara simple

y sencilla de entender ya que mi version original tiene muchos mas metodos para realizar las cuatro

Operaciones SQL de manera mas simple (INSERT, DELETE, UPDATE, SELECT), pero me reservo el codigo

y posiblemente mas adelante lo libere en este mismo blog, por ahora creo que seria demasiado y requeria

mas tiempo para explicarlo y estoy en el fin de mi ultimo semestre de la carrera!!! poryectos por aqui,

proyectos por allaa.

Bueno no me queda mas que decir hasta pronto y si a alguien le interesan los fuentes basta con pedirlos y se

los envio, hasta pronto y gracias x visitar.