Noticias Weblogs Foros Wiki Código

RecorteX

» Java
318 usuarios y 202 recortes de código
Usuario

Contraseña
Crear cuenta
Estás viendo los recortes de la etiqueta Java

RSS
Recortes: 19

Etiquetas relacionadas:
jdbc
xml
fechas
tomcat
Skin
utilidades
sql
base-datos
jstl
ssl
bd
Look_and_feel
tarea
certificados
planificador

JComboBox con más de una columna

Para esas ocasiones en que necesitemos un Combo que nos muestre un valor pero queremos que almacene información adicional de cada uno de los elementos nada más fácil que esto.

  String columnas[] = new String[2];
  columnas[0] = id;
  columnas[1] = etiqueta;
  combo.addItem (columnas);
Con esto nos guardará la información que necesitemos. Y con este otro nos mostrará tan solo lo que nosotros querramos.

combo.setRenderer (new DefaultListCellRenderer()
{
  public java.awt.Component getListCellRendererComponent (
    JList l,Object o,int i,boolean s, boolean f)
  {
     return new JLabel (((String[])o)[1]);
  }
});

Obtener consecutivo de una tabla

Método util para obtener el consecutivo de una tabla
 
  public final int Consecutivo(ConexionSGDB connDB, String NombreTabla, String Campo, String Condicion, MensajesError ME){
        String NombreMetodo = "Consecutivo(ConexionSGDB connDB, String Condicion, MensajesError ME)";
        
        Vector v = new Vector();
        java.sql.ResultSet rs = null;
        
        String query = "";
        int Consec = 0;
        
        try {
            query =  " select ifnull(max(" +Campo +"), 0) + 1 as Consecutivo from " +NombreTabla +" " + Condicion ;
            System.out.println(query);
            rs = connDB.ejecutaConsulta(query);
            
            if (rs!=null) {
                while(rs.next()){
                    Consec = rs.getInt("Consecutivo");
                }
            }
        
        } catch (Exception e){
            System.out.println ("Utilerias - Consecutivo");
                System.out.println ("Error: "+e.toString());    
                ME.setError( 1           , 
                            STR_CLASE   ,
                            NombreMetodo,
                            "Error al consultar el Consecutivo de la tabla x.");    
        }   
        return (Consec);
    }
 

Acceso a datos desde tags XML de la JSTL

Esta información siempre se me pierde, así que la dejo por aquí.

Se puede acceder a datos en diferentes ambitos desde la opción select de los tag xml de la JSTL. Ejemplo:
 
  <x:out select="$usuarios/usuario[nombre=$param:nombre]"/>
 
En este ejemplo se accedería al parámetro "nombre" pasado al jsp.

Se puede acceder a los siguientes objetos especiales:

$foo
$param:
$header:
$cookie:
$initParam:
$pageScope:
$requestScope:
$sessionScope:
$applicationScope:

Ejemplo de Algoritmo Simétrico DES para des/encriptacion JAVA

Escribe aquí el texto

import java.security.*;

import   javax.crypto.*;
import   javax.crypto.interfaces.*;
import   javax.crypto.spec.*;

import java.io.*;

public class EjemploDES  {
   /*  Ejemplo de uso de funciones de resumen Hash
    *    carga el fichero que recibe como parametro y genera el resumen
    */   
   public static void main (String[] args) throws Exception {	
      // Comprobar argumentos
      if (args.length !=1) {
	 mensajeAyuda();
	 System.exit(1); 
      }
      
      /* Cargar "provider" (sólo si no se usa el que viene por defecto) */
      // Security.addProvider(new BouncyCastleProvider());  // Usa provider BC
      // 
      /* PASO 1: Crear e inicializar clave */
      KeyGenerator keyGen = KeyGenerator.getInstance("DES");
      keyGen.init(56);
      SecretKey clave = keyGen.generateKey();
      
      System.out.println("CLAVE:" + new String(clave.getEncoded()) + "\n");
      
      
      /* PASO 2: Crear cifrador */
      Cipher cifrador= Cipher.getInstance("DES/ECB/PKCS5Padding");
           // Algoritmo DES
           // Modo : ECB (Electronic Code Book)
           // Relleno : PKCS5Padding
	   // 
      /* PASO 3a: Inicializar cifrador en modo CIFRADO */
      cifrador.init(Cipher.ENCRYPT_MODE, clave);
      
      /* Leer fichero de 1k en 1k y pasar fragmentos leidos al cifrador */
      byte[] bufferPlano = new byte[1000];
      byte[] bufferCifrado;
      
      String textoCifradoTotal = new String();
      FileInputStream in = new FileInputStream(args[0]);
      int bytesLeidos = in.read(bufferPlano,0, 1000);
      while(bytesLeidos != -1) {  // Mientras no se llegue al final del fichero
	 bufferCifrado = cifrador.update(bufferPlano, 0 , bytesLeidos);  // Pasa texto claro leido al cifrador
	 textoCifradoTotal = textoCifradoTotal + new String(bufferCifrado); // Acumular texto cifrado
	 bytesLeidos = in.read(bufferPlano,0, 1000);
      } 
      in.close();
      
      bufferCifrado = cifrador.doFinal(); // Completar cifrado (puede devolver texto)
      textoCifradoTotal = textoCifradoTotal + new String(bufferCifrado);

      
      System.out.println("--------------- TEXTO CIFRADO ---------------");
      System.out.println(textoCifradoTotal);   // Mostrar texto cifrado
      System.out.println("---------------------------------------------");
      
      System.out.println("--------------- TEXTO DESCIFRADO -------------");
      /* PASO 3b: Poner cifrador en modo DESCIFRADO */
      cifrador.init(Cipher.DECRYPT_MODE, clave);
      byte[] textoDescifrado = cifrador.update(textoCifradoTotal.getBytes()); // Pasar texto al descifrador
      System.out.print( new String(textoDescifrado) );
      textoDescifrado = cifrador.doFinal(); // Completar descifrado (puede devolver texto)
      System.out.print( new String(textoDescifrado) );
      System.out.println("----------------------------------------------");
   }
  
   public static void mensajeAyuda() {
      System.out.println("Ejemplo cifrado DES");
      System.out.println("\tSintaxis:   java EjemploDES fichero");
      System.out.println();	
   }
   
}

leer la salida standard de una aplicación JAVA

Escribe aquí el texto
 
  // Codigo para leer la salida standard
  try {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        while (str != null) {
            System.out.print("> prompt ");
            str = in.readLine();
            process(str);
        }
    } catch (IOException e) {
      //Excepciones capturadas
    }
 

Cargar skin en Java

Escribe aquí el texto
Trozo de código para cargar una apariencia a partir de un fichero externo. Es necesario tener el skinlf.jar en el path.

public void cargarSkin(String nombreFichero){
        
        URL url = null;
        try{
            url = SkinUtils.toURL(new File(nombreFichero));
            SkinLookAndFeel.setSkin(SkinLookAndFeel.loadThemePack(url));
            SkinLookAndFeel.enable();
        }catch(Exception ex){
            System.out.println("Error recogiendo skin : " + url);
        }
        SwingUtilities.updateComponentTreeUI(this);
        this.pack();
}
Trozo de código para cargar una apariencia a partir de las clases de java.


        try{
            // CUALQUIERA DE ESTOS TRES MODELOS PUEDE SER CARGADO. ASTERISCAR LOS QUE NO
            // QUERAMOS HACERLOS VISUALES
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
            //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
            //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            SwingUtilities.updateComponentTreeUI(this);
            this.pack();
            
        }catch(Exception error){
            System.out.println("Error: " + error);
        }

Acceso JDBC básico

Estructura básica para acceder a una consulta SQL por JDBC. Creamos la conexión, pero típicamente la obtendremos de algún DataSource o la estaremos reutilizando.
 
PreparedStatement ps=null;
ResultSet rs=null;
String sql="SELECT algo FROM algunsitio WHERE algo=?";
Connection c=null;
 
try
{
     Class.forName ("oracle.jdbc.OracleDriver");
     c = DriverManager.getConnection("jdbc:oracle:thin:@maquina.dominio:1521:instancia", "usuario", "passwd");
     ps = c.prepareStatement(sql);
     //parametros
     ps.setString(1, "p");
     rs = ps.executeQuery();
 
     while (rs.next())
     {
           // dato = rs.getString(1);
     }
}catch (SQLException se)
{
   // excepcion !!
   se.printStackTrace(System.err);
}finally
{
  //ten en cuenta que esto puede lanzar SQLexception a su vez...
  if (rs!=null)
     rs.close();
  if (ps!=null)
     ps.close();
  if (c!=null)
     c.close();
}
 

Ejecutar un proceso cada cierto tiempo en un contenedor de servlets (tomcat)

Se implementa como un Listener de aplicación:
 
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import java.util.TimerTask;
import java.util.Timer;
 
public class Tarea extends TimerTask implements ServletContextListener {
    private Timer timer;
 
    public void contextInitialized(ServletContextEvent evt) {
        // Iniciamos el timer
        timer = new Timer();
        timer.schedule(this, 0, 10*60*1000);  // Ejemplo: Cada 10 minutos
    }
 
    public void contextDestroyed(ServletContextEvent evt) {
        timer.cancel();
    }
    
    public void run() {
        // Aquí el código a ejecutar cada cierto tiempo
    }    
}
 
Finalmente hay que añadir el listener al fichero web.xml de la aplicación. Ejemplo:
 
<web-app>
  <listener>
    <listener-class>Tarea</listener-class>
  </listener>
</web-app>
 

Obtener el primer día del próximo mes en Java

El siguiente código tiene en cuenta los cambios de año, etc.
 
java.util.Calendar cal=java.util.GregorianCalendar.getInstance();
cal.setLenient(true);
cal.add(java.util.Calendar.MONTH, 1);
cal.set(java.util.Calendar.DAY_OF_MONTH, 1);
 
// Ahora lo imprimimos
java.text.SimpleDateFormat format=new java.text.SimpleDateFormat("dd/MM/yyyy");
System.out.println(format.format(new java.util.Date(cal.getTimeInMillis())));
 

Leer un String de un Blob

Método para leer un String que por necesidades de tamaño se introduce en un blob. Al método se le pasa el resultSet y el nombre del campo en el que se encuentra el blob.
 
 
    public String leerBlob(ResultSet rs,String blob){
        String returndata="";
        ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
        BufferedInputStream bis;
        try {
            bis = new BufferedInputStream(rs.getBinaryStream(blob));
            byte[] bindata=new byte[1024];
            int bytesread = 0;
            try {
                if ( !rs.wasNull() ) {
                    if ( (bytesread = bis.read(bindata,0,bindata.length)) != -1 ) {
                        baos.write(bindata,0,bytesread);
                        returndata= baos.toString();
                    }
                    bis.close();
                }
            } catch (IOException e) {
                System.out.println("leerBlob -- Se produjo un error en la consulta");
                System.out.println(e.getMessage());
            }
        } catch (SQLException ex) {
            System.out.println("leerBlob -- Se produjo un error en la consulta");
            System.out.println(ex.getMessage());
        }
        return returndata;
    }
 
info@recortex.com - Proyecto: Juanjo Navarro, 2006 - Diseño: Albin