viernes, 1 de abril de 2011

Otra forma de Limitar la cantidad de caracteres, números o decimales en java

Para mejorar la restricción a un JTexBox se puede usar la propiedad "setDocument" de los
cuadros de texto en java, de la siguiente forma.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorCadena(txt,20));
En este ejemplo podemos ver que el modo de usando el segundo parametro para indicar
cuantos caracteres son permitidos.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorDecimal(txt,10,3));
En este otro ejemplo se muestra el uso para restringir el ingreso de números decimales.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorEnteros(txt,10));
No creo que necesite explicación.
(claro hay que poner las clases en el mismo paquete)

La magia se encuentra en las clases "Limitar" Decimales, Enteros y Cadena.
(cualquier duda o mejora aquí pueden publicarla con confianza)

En todas las clases el truco es sobrecargar el método "insertString" de PlainDocument.

Descargar
Esta es una solución mejorada de la que publiqué hace algún tiempo...
perdón por no dar mucha explicación.

viernes, 4 de marzo de 2011

Convertir un ResultSet a un ArrayList (Java)

Saludos.

Esta clase sirve para facilitar la interpretación entre un ResultSet a un ArrayList, además de que evitar que se tengan "try" por todos lados y se puedan administrar más facilmente.

Haciendo mucho mas sencillo el manejo de las consultas dentro de la aplicación.

Esta clase provee las siguientes funciones:
  • Select
  • SelectMatch
  • Insert
  • (Update disponible muy pronto)
Al instanciar un objecto de esta clase se pueden enviar los parámetros necesarios para realizar la conexión.

Instanciación:
Query qry = new Query("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/temporal", "root", "daniel");
ó solo = new Query(); y enviar los parametros por medio de los seters y geters disponibles.

Ejemplo 1:
Con el siguiente fragmento de código podemos saber si existe un registro
ideal para cuando deseamos hacer un ingreso que debe de ser único.
Query qry=new Query();
if (consulta.SelectMatch("tableName","ColumnName","parametro") )
...
else
...
Ejemplo 2:
Con el siguiente fragmento se hace una consulta que devuelve un resultado para mostrar en la interfáz gráfica.
ComboBox1.removeAllItems();
ArrayList Resultado=new ArrayList();
Query consulta=new Query();
Resultado=consulta.Select("* FROM CHASIS",2);
if (Resultado!=null)
for (int x=0;xComboBox1.addItem((Resultado.get(x))[0]+") "+(Resultado.get(x))[1]);
Se puede observar que lo que hace este código es:
  1. Borrar el contenido del ComboBox.
  2. Se crea un ArrayList de tipo arreglo de String.
  3. Se crea un objeto de tipo Query.
  4. Se ejecuta el método Query.Select, que devuelve como resultado un ArrayList, este método recibe un String y un entero. En el String va el código SQL necesario y el entero es para indicar el número de columnas que devolverá la consulta.
  5. Se verifica que la consulta haya devuelto resultados.
  6. En este punto ya es posible recorrer el ArraList para guardarlo por ejemplo en un ComboBox.
Ejemplo 3:
Query consulta=new Query();
if (consulta.SelectMatch("Tabla", "NOMBRE", txtNombre.getText())==false){
consulta=new Query();
if ( consulta.Insert(Tabla+" (NOMBRE) VALUES('"+txtNombre.getText()+"')") ){
    ...//Si fue insertado correctamente
}else{
    ...
}
}else{
...//Si ya existe
}
  • Se crea una Variable de tipo Query
  • Se ejecuta el método Query.SelectMatch(), este método recible como parámetros el nombre de la tabla, el nombre del campo a comparar y el parametro contra el cual se debe comparar el nombre del campo.
  • se puede observar que se compara que el valor ingresado (parametro 3) no existe en "Tabla", si no existe se procede a insertar el registro en la base de datos.
  • se reinicia la variable consulta
  • se ejecuta el método Query.Insert(), que recibe como parámetro el código SQL para ma misma.
Espero les sea de utilidad.

Definición de la clase "Query".
package administrador;

import java.sql.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;
/**
 *
 * @author Daniel
 */
public class Query {
    private String DRIVER="com.mysql.jdbc.Driver";//mySQL
    private String RUTA="jdbc:mysql://localhost/temporal";//Prueba";//mySQL
    private String USER="root";
    private String PASSWORD="daniel";
    private Connection CONEXION;

    public Query(){
        
    }
    public Query(String Driver, String Ruta, String User, String Password){
        DRIVER=Driver;
        RUTA=Ruta;
        USER=User;
        PASSWORD=Password;
    }
    public boolean Connect(){
        try{
            Class.forName(DRIVER);
            CONEXION = DriverManager.getConnection(RUTA,USER,PASSWORD);
            Statement sentencia=null;
            sentencia=CONEXION.createStatement();
            return true;
        }catch(ClassNotFoundException ex){
            JOptionPane.showMessageDialog(null, "Driver no disponible. "+ex,"Error",JOptionPane.ERROR_MESSAGE);
            return false;
        }catch(SQLException ex){
            JOptionPane.showMessageDialog(null, "Conexion a la base de datos no disponible. \n"+ex,"Error",JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    public ArrayList<String[]> Select(String SQL, int NumColumnas){
        if (Connect()){
            try{
                ArrayList<String[]> matResultado=new ArrayList<String[]>();
                String Fila[]=new String [NumColumnas];

                Class.forName(DRIVER);
                CONEXION = DriverManager.getConnection(RUTA,USER,PASSWORD);

                Statement sentencia=null;
                sentencia = CONEXION.createStatement();
                ResultSet resultado = sentencia.executeQuery("SELECT "+SQL);
                while (resultado.next())
                {
                    Fila=new String[NumColumnas];
                    for (int x=0;x<NumColumnas;++x){
                        Fila[x]=resultado.getObject(x+1).toString();
                    }
                    matResultado.add(Fila);
                }
                if (matResultado.isEmpty()) {return null;}
                return matResultado;
            }catch(Exception ex){}
        }
        return null;
    }
    /**
     * @return "true" si IDname=IDvalue en tableName
     * ejemplo: SELECT IDname FROM tableName WHERE IDname='IDvalue';
     */
    public boolean SelectMatch(String tableName, String IDname, String IDvalue){
        if (Connect()){
            try{
                ArrayList<String> matResultado=new ArrayList<String>();

                Class.forName(DRIVER);
                CONEXION = DriverManager.getConnection(RUTA,USER,PASSWORD);

                Statement sentencia=null;
                sentencia = CONEXION.createStatement();
                ResultSet resultado = sentencia.executeQuery("SELECT "+IDname+" FROM "+tableName+" WHERE "+IDname+"='"+IDvalue+"'");
                while (resultado.next())
                {
                    matResultado.add(resultado.getObject(1).toString());
                }
                if (matResultado.isEmpty()) {return false;}
                return true;
            }catch(Exception ex){}
        }
        return false;
    }
    public boolean Insert(String SQL){
        if (Connect()){
            try{
                Class.forName(DRIVER);
                CONEXION = DriverManager.getConnection(RUTA,USER,PASSWORD);

                Statement sentencia=null;
                sentencia = CONEXION.createStatement();
                sentencia.execute("INSERT INTO "+SQL);
                return true;
            }catch(Exception ex){}
        }
        return false;
    }
    public void setDriver(String Drv){
        DRIVER=Drv;
    }
    public void setRuta(String Rut){
        RUTA=Rut;
    }
    public void setUser(String Usr){
        USER=Usr;
    }
    public void setPass(String Pas){
        PASSWORD=Pas;
    }
    public String getDriver(){
        return DRIVER;
    }
    public String getRuta(){
        return RUTA;
    }
    public String getUser(){
        return USER;
    }
    public String getPass(){
        return PASSWORD;
    }
}