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

sábado, 24 de agosto de 2013

Ejecutando programas externos desde .Net

Dada la necesidad de ejecutar un programa hecho en Java desde consola usando .Net con Visual Basic me puse un poco a investigar dada mi falta de experiencia en eso. Después de no mucho tiempo (2 minutos) encontré la solución resolviendo el problema de "ocultar" la ventana MS-DOS que aparece al ejecutar el programa:

Dim proceso As New System.Diagnostics.ProcessStartInfo

'Colocamos la ruta del programa a ejecutar, o comando

proceso.FileName = "java"

'Agregamos los parámetros de ejecución

Dim argumentos As String = "-jar ejecuta.jar"

proceso.Arguments = Argumentos

'Ponemos las condiciones para que se oculte la ventana al invocar el proceso

proceso.WindowStyle = ProcessWindowStyle.Hidden

proceso.CreateNoWindow = True

'Iniciamos el proceso en un nuevo hilo

Process.Start(proceso)



Ojalá les sirva para sus proyectos

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?

Algoritmos Genéticos

Los algoritmos genéticos tienen su origen en la simulación de la Evolución. La evolución es el proceso en el cual los genes heredados de dos padres aptos son modificados, mejorados o mutados de tal forma que los nuevos individuos son mejores genéticamente hablando.
individuos
El proceso de mejoramiento se lleva a cabo al unir dos genotipos para producir un tercero. El genotipo son todas las características que componen al individuo (color de piel, color de cabello, tipo de ojos, tamaño de dientes, etc). Cuando se mezclan dos individuos (dos genotipos),  existen diversas combinaciones que se pueden producir  dependiendo de la misma mezcla y de los mismos genes que tengan los individuos.