Friday, August 17, 2007

StoreProcedures en IBatis

Creación de un store procedure en archivo XML

Se definen los parametros del store procedure, los parametros de entrada como los de salida.

class="java.util.HashMap" <-- HashMap con los parametros.
id="parametrosStoreProcedure" <-- El nombre de la estructura de parametros.



<parameterMap id="parametrosStoreProcedure" class="java.util.HashMap">
<parameter property="Parametro1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
<parameter property="ParametroSalida" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
</parameterMap>


Construimos la llamada al store procedure no sin olvidar pasar los parametros al store procedure parameterMap="parametrosStoreProcedure".

parameterMap="parametrosStoreProcedure" <-- Nombre de los parametros a pasar que es el id de parameterMap id="StoreProcedure" <-- Identificador o nombre del StoreProcedure.



<procedure id="StoreProcedure" parameterMap="parametrosStoreProcedure">
{ call NombreStoreProcedure(?,?) }
</procedure>


Ahora pasamos al código en Java.
Así es como se mandaría ejecutar el store procedure en código de Java.



public String validaICVE(String valor1) throws Exception, DaoException{
HashMap map = new HashMap();
map.put("Parametro1",valor1);
try{
getSqlMapExecutor().queryForObject("extracListSelecICVE", map);
return map.get("ParametroSalida").toString(); //<-- (1)
}catch(DaoException ed){
throw new DaoException("error del DaoException");
}catch(Exception e){
throw new Exception("Error de Exception");
}
}


(1) Obtenemos el parámetro de salida después de ejecutar el store procedure.

Monday, August 06, 2007

Como utilizar el Iterate en IBatis para construir sentencia IN en SQL.

Primeramente creamos un Bean que contenga un tipo Collection ya que no se pude pasar el atributo directamente se tiene que mandar forsosamente atraves de un Bean.

Ejemplo :


public class Bean {
List collection;

public void setCollection(List collection) {
this.collection = collection;
}

public List getCollection() {
return collection;
}
}

En este caso se define el alias de localización del archivos en la parte superior del archivo XML y solo abajo de

<sqlMap namespace="_XML_" >
<typeAlias alias="Bean" proyecto.vo.Bean" />
<select id="SelecICVE" resultClass="xml" parameterClass="Bean">
</select>
y se utiliza de en la parte de parameterClass="Bean" o se puede colocar la ruta del archivo directamente en la parte de parameterClass="proyecto.vo.Bean" desde mi punto de vista es lo mismo simplemente depende de la forma en que se quiera utilizar.

<select id="SelecBean" resultClass="xml" parameterClass="Bean">
SELECT * FROM TABLA WHERE DATO = 'DATO'
<iterate prepend=" AND CAMPOBD IN " property="collection" open="(" close=")" conjunction=",">
#collection[]#
</iterate>
</select>

prepared="AND CAMPODB IN " <-- Es la instrucción que se agregara despues de 'DATO'
property="collection" <-- Definida en Bean
resultClass = "xml" <-- El valor que nos devuelve la consulta en tipo XML Nota: La columna que no tiene valor en la consulta no lo agrega a la estructura del XML.
open="(" y close=")" <-- Valores opcionales aunque en mi caso si los utilizo para la instrucción.
conjunction = "," <-- En mi caso si la utilizo porque puede ir uno o varios valores separados por ","

Sunday, June 10, 2007

RowHandler Ibatis

Como Extraer n registros con Ibatis

Utilizamos la interfaz RowHandler en Ibatis.


class rowHandler extends SqlMapDaoTemplate implements RowHandler{
public rowHandler(DaoManager daoManager) {
super(daoManager);
}

public void handleRow(Object objeto){
String xml = (String)objeto;
System.out.println(xml);
}
}


public class CatEncuestasDAOImpl extends SqlMapDaoTemplate implements CatEncuestasDAO {
public CatEncuestasDAOImpl(DaoManager daoManager) {
super(daoManager);
}
public List obtenerEncuestasCE(int coordinacion) throws SQLException, Exception, DaoException{
List listaXMLs = null;
rowHandler rowhandler = new rowHandler(daoManager);
try{
getSqlMapExecutor().queryWithRowHandler("consultaSimpleXMLEstatales",1,rowhandler);
return null;
}catch(DaoException e){
throw new Exception("login.message.errorDB");
}finally{
listaXMLs = null;
}
}
}

Sunday, April 15, 2007

Clase para borrar archivos y carpetas en java

Este método que he creado lo utilizo para borrar estructuras de archivos que se encuentran anidadas. La clase, es una clase recursiva que va borrando niveles de archivos y directorios.

Las estructuras mas sencillas de eliminar son las estructuras que contienen un solo nivel aunque en rara ocasión no contienen archivos, las estructuras mas complejas son aquellas que contienen mas directorios anidados y archivos dentro de ellos.

En mi caso esta estructura la utilizaré dentro de un batch que lanzare desde un action de struts.



public class batch {
/**
* @param args
*/
public static void main(String[] args) {

new batch().new elimina().especificDirectory("c:/nueva/123");
// Método que borra todo dentro de esta carpeta.
// new batch().new elimina().directorio("c:/nueva");
}

class elimina {
public void directorio(String ruta) {
File file = new File(ruta);
String[] contenido = file.list();
for (int i = 0; i < contenido.length; i++) {
File fil = new File(ruta + "/" + contenido[i]);
if (!fil.delete()) {
fil = new File(ruta + "/" + contenido[i]);
if (fil.delete()) {
directorio(ruta + "/" + contenido[i]);
} else {
directorio(ruta + "/" + contenido[i]);
}
}
if (fil.isDirectory()) {
fil.delete();
}
}
}

public void especificDirectory(String ruta) {
new elimina().directorio(ruta);
File file = new File(ruta);
file.delete();
}
}
}

Friday, February 09, 2007

Declaración de arreglos en Java.

Declaración de arreglos en Java.

Existen varias de formas de declarar arreglos en java, las mas comunes son la de dar la dimensión fija antes de utilizar el arreglo; es importante saber que las dimensiones del arreglo siempre deben de definirse antes de utilizar el arreglo. ¿por qué ? bueno es buena pregunta, Java siempre debe de saber el tamaño de memoria que se asignará al arreglo para almacenar los datos.


Ejemplos de arreglos unidimensionales :


Instanciación de arreglo en una sola línea.

int [ ] array = new int[3];

Los corchetes se pueden utilizar de diferentes maneras sin afectar la declaración.

int array [ ] = new int[3];

Podemos también utilizar esta forma de declarar los arreglos.

int[] array;

array = new int[3];

Arreglo de String

String [] array = new String[3];

Declaración de arreglos multidimensionales.

Existen varias maneras de declarar una arreglo multidimensional, la mas común es :

int [][] array = new int[3][3];

int [][] array = new int[][] {{1,2,3},{1,2,3},{1,2,3}};

Otra de las formas que probablemente puede causar un poco de confusión esta :

int [][] array = new int [3][];

int [][] array = new int[][] {{1,2,3}};

Para la cual si se intenta acceder a la posición [2][0] marcaría un error (tomando en cuenta que el arreglo comienza de la posición 0). Ya que todavía no se tiene especificada la dimensión del arreglo para esta posición. Para poder realizar esta operación se tiene que hacer de la siguiente manera.

int [][] array = new int[3][];

array[0] = new int[2];

array[1] = new int[3];

array[2] = new int[1];

int [][] array = new int[][] {{1,2,3}};

array[0] = new int[] {1,2};

array[1] = new int[] {1,2,3};

array[2] = new int[] {1};

Mandado arreglo como parámetro.

public class arrays{

public void data(int [] array){

System.out.println(“Tamaño de arreglo ” + array.length);

}

static public void main(String args[]){

int [] array_int = new int[2];

array_int[0] = 1;

array_int[1] = 2;

arrays array = new arrays();

array.data(new int[] {1,2,3,4});

array.data(array_int);

}

}

Friday, July 07, 2006

Creando clases abstractas

a clase abstracta es una clase que puede ser heredada pero no puede ser instanciada.Estas clases también pueden ser utilizadas para que los programadores personalizaen los métodos ya existentes(sobreescribiendolos) por ejemplo :



abstract class abstracta_principal {
abstract String getData();

abstract int getSuma(int a, int b);

void print() {
System.out.println(getData());
}

void imprimeSuma() {
System.out.println(getSuma(0, 0));
}

public void imprimir() {
System.out.println(getSuma(10, 5));
}
}

class clase_abstracta_q_Hereda extends abstracta_principal {
public String getData() {
return "¡Hola mundo!";
}

public int getSuma(int a, int b) {
return (a + b);
}
}

public class classAbstracta {
public static void main(String[] args) {
clase_abstracta_q_Hereda abs = new clase_abstracta_q_Hereda();
System.out.println(abs.getData());
System.out.println(abs.getSuma(3, 8));
abs.imprimir();
}
}

Monday, April 17, 2006

¿ Que es un dato Serializable ?

Es el mecanismo por medio del cual se puede realizar la persistencia. Cuando un ejemplar de bean es serializado se convierteen un canal de datos para ser escrito.

Serialización por Defecto: El Interface Serializable

El interface Serializable proporciona serialización automática mediante la utilización de las herramientas de Java Object Serialization. Serializable no declara métodos; actúa como un marcador, diciéndole a las herramientas de Serialización de Objetos que nuestra clase Bean es serializable. Marcar las clases con Serializable significa que le estamos diciendo a la Máquina Virtual Java (JVM) que estamos seguros de que nuestra clase funcionará con la serialización por defecto. Aquí tenemos algunos puntos importantes para el trabajo con el interface Serializable.

* Las clases que implementan Serializable deben tener un constructor sin argumentos. Este constructor será llamado cuando un objeto sea "reconstituido" desde un fichero .ser.

* No es necesario implementar Serializable en nuestra subclase si ya está implementado en una superclase.

* Todos los campos excepto static y transient son serializados. Utilizaremos el modificador transient para especificar los campos que no queremos serializar, y para especificar las clases que no son serializables.

Como revisar el año

Ha sido uno de los principales problemas revisar formatos de fecha.

if (new SimpleDateFormat ("yyyy").Format(endDate).equals("2000")){


}

Convertir un Date a String - How convert from Date to String

Creo que es uno de los dolores de cabeza mas complicados a los que nos enfrentamos a la hora de programar, el convertir tipos date a String , aquí agrego el método que soluciona ese problema :



public static void main(String[] args) {
String fecha = "12/10/1980";
StringTokenizer stoken = new StringTokenizer(fecha, "/");
Calendar cal;
Date fecha_convertida = null;
try {
String dia = null;
String mes = null;
String anio = null;
while (stoken.hasMoreTokens()) {
dia = stoken.nextToken();
mes = stoken.nextToken();
anio = stoken.nextToken();
}
cal = Calendar.getInstance();
cal.set(Calendar.YEAR, (new Integer(anio).intValue()));
cal.set(Calendar.MONTH, new Integer(mes).intValue() - 1);
cal.set(Calendar.DAY_OF_MONTH, new Integer(dia).intValue());
fecha_convertida = new Date(cal.getTime().getTime());
} catch (Exception e) {
e.printStackTrace();
}
}

Como utilizar el tokenizer - How use tokenizer

Una de las cosas que ayudan bastante es podar separar una cadena por medio de tokens, y esta función lo aplica perfectamente.

java.util.*;
StringTokenizer sd = new StringTokenizer("Hello World of java");
while (sd.hasMoreTokens){
System.out.println("Token : " + sd.nextToken());
}

--> La salida de esta función

Hello
World
of
java

Algunas conversiones de tipos mas comunes

Conversion de String a boolean
How Convert of String to boolean :
boolean var1;
String var2 = "false";
var1 = Boolean.ValueOf(var2).boolenaValue();

Other form of convert String to boolean.
Boolean.valueOf(String)

Conversiones mas comúnes de tipos de datos String a Numéricos
How Convert from String to Numeric :

Integer.parseInt(String)
Float.parseFloat(String)
Long.parseLong(String)

Como utilizar el hasmap



public static void main(String args[]) {
// Definir un HashMap
HashMap global = new HashMap();
// Insertar valores "key"-"value" al HashMap
global.put("Doctor", "(+52)-4000-5000");
global.put("Casa", "(888)-4500-3400");
global.put("Hermano", "(575)-2042-3233");
global.put("Hermana", "(421)-1010-0020");
global.put("Suegros", "(334)-6105-4334");
global.put("Oficina", "(304)-5205-8454");
global.put("Ana C.", "(756)-1205-3454");
global.put("Luis G.", "(55)-9555-3270");
global.put("Oficina 2", "(874)-2400-8600");

// Definir Iterator para extraer/imprimir valores
for (Iterator it = global.keySet().iterator(); it.hasNext();) {
String s = (String) it.next();
String s1 = (String) global.get(s);
System.out.println(s + " : " + s1);
}
// Definir un arreglo con valores determinados
String args1[] = { "Casa", "Ana C.", "Luis G." };
// Eliminar los valores del HashMap contenidos en el Arreglo anterior
for (int i = 0; i < args1.length; i++) {
global.remove(args1[i]);
}
System.out.println("---- Agenda Modificada ----");
// Definir Iterator para extraer/imprimir valores
for (Iterator it2 = global.keySet().iterator(); it2.hasNext();) {
String s = (String) it2.next();
String s1 = (String) global.get(s);
System.out.println(s + " : " + s1);
}
}


Hit counters


page counter