Mostrando entradas con la etiqueta cabachu. Mostrar todas las entradas
Mostrando entradas con la etiqueta cabachu. Mostrar todas las entradas

lunes, 15 de julio de 2013

Menú circular

Buscando ideas para crear un menú para la página www.llacuadetetique.com me topé con ésta bonita idea, la cual es crear un menú circular:


Donde el código para ponerlo en nuestra web la podemos encontrar en: codigo


lunes, 8 de julio de 2013

Crear código SQL en Java a partir de una consulta

En una ocasión tuve la necesidad de respaldar ciertos datos de una base de datos MySql, los usuarios del programa tenian que generar a partir de una consulta los datos a exportar. De ésta forma tuve que buscar la manera de crear el código de inserción a la base de datos a partir de un conjunto de datos obtenidos a partir de una consulta a la BD.

El caso es el siguiente: Se tiene una consulta X, se requiere guardar a un archivo la exportación de la consulta y conocemos el nombre de la tabla de la cual se extrajo la información.
El primer procedimiento era usar las mismas herramientas que proporciona MySQL para llevar a cabo la exportación, solo que no todas las máquinas que usaban el programa se les podia instalar los ejecutables necesarios para llevar éste método; así que se decidió que se hiciera de forma plana (SQL) en archivos de textos importables a la Base de Datos final.

El método que se creo fue el siguiente:

    /**
     * Método que crea cadenas insert para cada datos leido de una consulta
     * @param entrada Consulta a crear los inserts
     * @param archivo Ruta del archivo a escribir
     * @param tabla Nombre de la tabla donde se insertaran los datos
     * @return Si se pudo o no realizar la conversión
     */
    public boolean creaInsert(ResultSet entrada, String archivo, String tabla) {
        try {
            ResultSet salidaRS = entrada;
            ResultSetMetaData rsmd = salidaRS.getMetaData();
            String consulta = "";
            consulta = "insert into " + tabla + " (";
            for (int k = 1; k < rsmd.getColumnCount(); k++) {
                consulta = consulta + rsmd.getColumnName(k + 1) + ",";
            }
            consulta = consulta.substring(0, consulta.length() - 1) + ") VALUES(";
            for (int k = 1; k < rsmd.getColumnCount(); k++) {
                if (rsmd.getColumnTypeName(k + 1).contains("INTEGER")) {
                    consulta = consulta + "" + salidaRS.getString(k + 1) + ",";
                } else if (salidaRS.getString(k + 1) == null || salidaRS.getString(k + 1).contains("null") || salidaRS.getString(k + 1).contains("----")) {
                    consulta = consulta + "null,";
                } else {
                    consulta = consulta + "'" + salidaRS.getString(k + 1) + "',";
                }
            }
            consulta = consulta.substring(0, consulta.length() - 1) + ");";
            File f;
            f = new File(tabla + ".txt");
            if (!f.exists()) {
                f.createNewFile();
            }
            escribeArchivo(tabla, consulta);
            return true;
        } catch (Exception a) {
            a.printStackTrace();
        }
        return false;
    }

De ésta forma se crea un archivo que contiene los inserts correspondientes a la consulta pasada como parámetro.

viernes, 5 de julio de 2013

Edad en Dias Meses Años usando java y mysql

En ocasiones es necesario saber la edad de una persona en cierta fecha, para esto existen diversas alternativas dependiendo de las herramientas con las que contamos.
En ésta ocasión les muestro la forma de hacerlo usando Java y una conexión a una base de datos MySql.
Para que el método descrito aqui funcione es necesario que se cuente con la conexión MySql ya creada y conectada y las fechas inicial y final. La fecha inicial puede ser la fecha de nacimiento y la final la fecha actual.
Para que el método sea lo mas amplio posible se pasa como parámetro ambas fechas.

public ResultSet DMAdiferencia(String inicio, String fin) {
try {
ResultSet diferencia = this.derby.createStatement().executeQuery(""
+ "SELECT   {fn TIMESTAMPDIFF(SQL_TSI_YEAR,{ts '" + inicio + " 00:00:00' },{ts '" + fin + " 00:00:00'}) } AS ANIOS, "
+ " ( ( {fn TIMESTAMPDIFF(SQL_TSI_MONTH,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'})}) -  ( {fn TIMESTAMPDIFF(SQL_TSI_YEAR,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'}) } * 12)) AS MESES, "
+ " -( {fn TIMESTAMPDIFF(SQL_TSI_DAY,{ts '" + fin + " 00:00:00'},"
+ "         {fn TIMESTAMPADD ( SQL_TSI_MONTH,"
+ "              (({fn TIMESTAMPDIFF(SQL_TSI_MONTH,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'})}) - ( {fn TIMESTAMPDIFF(SQL_TSI_YEAR,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'})  } )* 12 ),"
+ "             {fn TIMESTAMPADD( SQL_TSI_YEAR,"
+ "                 ({fn TIMESTAMPDIFF(SQL_TSI_YEAR,{ts '" + inicio + " 00:00:00'},{ts '" + fin + " 00:00:00'})}), {ts '" + inicio + " 00:00:00'} "
+ "             )}"
+ "         )}"
+ "     )"
+ "}) "
+ "AS DIAS");
return diferencia;

} catch (Exception a) {
a.printStackTrace();
}
return null;
}


Como resultado de éste método se retorna un tipo de dato ResultSet que contiene tres columnas: DIAS, MESES, ANIOS en caso de que no pasara error alguno. El uso del método puede ser mas o menos así:

ResultSet salida= DMAdiferencia("2013-01-01","2013-12-12");

int dias= salida.getInt("DIAS");

int meses=salida.getInt("MESES");

int anios= salida.getInt("ANIOS");



Ojo, la fecha debe estar en formato YYYY-MM-DD.

Espero que les sirva para sus proyectos

lunes, 1 de julio de 2013

Cálculo de CRIP (Clave de Registro e Identidad Personal)

Código para generar la CRIP, usada normalmente en las actas de nacimiento y como parte de la CURP
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utils;

/**
 *
 * @author cabachu
 */
import java.io.*;
import java.util.*;
// calcula el digito verificador de la CRIP para siglo pasado y el siglo actual 
// necesita tomar los valores de entidad, municipio, oficialia, acta y año 
//regresa un string que contiene la CRIP 
public class CalculaCrip {

    public String obtener_crip(
            String strEntidad,
            String strMunicipio,
            String strOficialia,
            String strAnio,
            String strActa) {
        String strdatos = "";
        String strletras = "JABCDEFGHIJ ";  // constantes de letras 
        String strnumeros = "012345678900";// constantes de numeros
        int ik[] = {3, 2, 7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2}; // constante para calcular la crip 
        int[] imul = new int[16];
        int[] inum = new int[16];
        int isuma = 0;
        int ix = 0;
        int ia = 0;
        int idigito = 0;
        if (strEntidad.length() == 1) {
            strEntidad = "0" + strEntidad;
        } // se agrega un cero si vien 1 solo digito 
        if (strMunicipio.length() == 1) {
            strMunicipio = "00" + strMunicipio;
        }// se agregan ceros hasta copletar 3 digitos 
        if (strMunicipio.length() == 2) {
            strMunicipio = "0" + strMunicipio;
        }
        if (strOficialia.length() == 1) {
            strOficialia = "0" + strOficialia;
        }// se agregan ceros hasta copletar 2 digitos 
        if (strActa.length() == 1) {
            strActa = "0000" + strActa;
        }// se agregan ceros hasta copletar 5 digitos 
        if (strActa.length() == 2) {
            strActa = "000" + strActa;
        }
        if (strActa.length() == 3) {
            strActa = "00" + strActa;
        }
        if (strActa.length() == 4) {
            strActa = "0" + strActa;
        }
strdatos = strEntidad + strMunicipio + strOficialia + strAnio.substring(2, 4) + strActa; // se contatena la raiz para calcular el digito
        System.out.println(strdatos);
// a cada numero de la raiz se le multiplica por un nuemro de la constante y se suman 
        for (ia = 0; ia < 14; ia++) {
            inum[ia] = Integer.valueOf(strdatos.substring(ia, ia + 1)).intValue();
            imul[ia] = inum[ia] * ik[ia];
            isuma = isuma + imul[ia];
        }
// se obtiene el digito verificador 
        ix = isuma % 11;
        System.out.println("suma  ");
        System.out.println(isuma);
        System.out.println("digito antes de resta ");
        System.out.println(ix);
        if (ix <= 0) {
            idigito = 0;
        } else {
            idigito = 11 - ix;
        }
// se evalua el año y se coloca el digito verificador numero o letra 
        System.out.println("valor de comparacion");
        System.out.println(strAnio.compareTo("1999"));
        if (strAnio.compareTo("1999") > 0) {
            if (idigito == 0) {
                strdatos = strdatos + "J";
            } else {
                System.out.println(idigito);
                strdatos = strdatos + strletras.substring(idigito, idigito + 1);
            }
        } else {
            System.out.println(idigito);
            strdatos = strdatos + strnumeros.substring(idigito, idigito + 1);
        }
        System.out.println(strdatos);
        return strdatos;

    }
}

viernes, 28 de junio de 2013

RFC y CURP en Java

RFC
El Registro Federal de Contribuyentes (o RFC) se refiere a una clave que tiene, toda persona física en México para realizar alguna actividad licita que este obligada a pagar impuestos a toda persona moral con algunas excepciones. A estas personas se les llama contribuyentes.

Esta clave debe llevar datos personales del contribuyente o persona física como su nombre y fecha de nacimiento; o nombre y fecha de origen de la persona moral. El registro se debe hacer en las oficinas del Servicio de Administración Tributaria de la Secretaria de Hacienda y Crédito Publico, y es obligatorio para todos los que señale el Código Fiscal de la Federación.
Como saber el RFC de una persona fisica?