Weblogs Código

RecorteX

» java
73 usuarios y 244 recortes de código
Usuario

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

RSS
Recortes: 23

Etiquetas relacionadas:
jdbc
xml
tomcat
consola
hanoi
torres
juego
fechas
leer
sql
base-datos
Look_and_feel
debug
ssl
bd
URL
planificador
descargar
StringBuffer
jstl
byte
utilidades
ReplaceAll
documento
tarea
certificados
Skin

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;
    }
 

Distancia entre dos Puntos

Escribe aquí el texto
 
import javax.swing.JOptionPane;
import java.lang.Math;
import java.text.DecimalFormat;
 
public class Distancia{
 
	public static void main(String[] args){
		String x1 = JOptionPane.showInputDialog("Ingresa un x1:");
		String y1 = JOptionPane.showInputDialog("Ingresa un y1:");
	        String x2 = JOptionPane.showInputDialog("Ingresa un número x2:");
	        String y2 = JOptionPane.showInputDialog("Ingresa un número y2:");
		
                JOptionPane.showMessageDialog(null,CalculaDistancia(x1,y1,x2,y2),
                         "Distancia entre dos Puntos",JOptionPane.PLAIN_MESSAGE);  
	}
	public static String CalculaDistancia(String x_1, String y_1,String x_2, String y_2){
 
	    double cordX1 = Double.valueOf(x_1).doubleValue();
            double cordY1 = Double.valueOf(y_1).doubleValue();
            double cordX2 = Double.valueOf(x_2).doubleValue();
            double cordY2 = Double.valueOf(y_2).doubleValue();
 	    double respuesta = Math.sqrt( Math.pow ((cordX2-cordX1),2) + Math.pow((cordY2-cordY1),2));
 	    DecimalFormat dosdecimales = new DecimalFormat("0.00");
 	    String resultado = "La Distacia es: " + dosdecimales.format(respuesta);
	    return resultado;
	   }
}
 

Obtener un DataSource de Tomcat

 
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/DB");
 
Luego hay que definir dicha base de datos DB en el contexto de la aplicación web. Ejemplo:
 
<Context path="/aplicacion" docBase="aplicacion">
    <Resource name="jdbc/DB" auth="Container" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/DB">
        <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
	</parameter>
	<parameter>
            <name>driverClassName</name>
            <value>com.mysql.jdbc.Driver</value>
	</parameter>
	<parameter>
            <name>url</name>
            <value>jdbc:mysql://host/database?autoReconnect=true</value>
	</parameter>
	<parameter>
            <name>username</name>
            <value>usuario</value>
	</parameter>
	<parameter>
            <name>password</name>
            <value>clave</value>
	</parameter>
	<parameter>
            <name>maxActive</name>
            <value>30</value>
	</parameter>
	<parameter>
            <name>maxIdle</name>
            <value>10</value>
	</parameter>
	<parameter>
            <name>maxWait</name>
            <value>10000</value>
	</parameter>
        <parameter>
            <name>removeAbandoned</name>
            <value>true</value>
        </parameter>
        <parameter>
            <name>logAbandoned</name>
            <value>true</value>
        </parameter>                        
    </ResourceParams>
</Context>
 

Obtener el último día de un mes

Se crea un GregorianCalendar con el día 1 del mes y se utiliza la función getActualMaximum.
 
Calendar cal = GregorianCalendar.getInstance();
cal.set(2006, 1, 1); // Febrero 2006, los meses empiezan en 0.
System.out.println("Último día: " + cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH));
 

Devolver un documento pdf desde un servlet

Antes de enviar el documento (sus bytes) hay que fijar el content-type del resultado.
 
response.setContentType("application/pdf");
 
Si se desea también se puede fijar un nombre de fichero:
 
response.setHeader("Content-Disposition", "attachment; filename=\"nombre_fichero.pdf\"");
 

Obtener el DN de un certificado digital

En java:
 
java.security.cert.X509Certificate certificados[]=(java.security.cert.X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
String dn=certificados[0].getSubjectDN().toString();
 

Convertir un ResultSet a XML

Esta función convierte un ResultSet en formato XML y lo imprime.
 
public void rs2xml(ResultSet rs,
                  String tabla,
                  String elemento,
                 java.io.Writer out) throws java.io.IOException, SQLException {
    ResultSetMetaData rsmd=rs.getMetaData();
    out.write("<"+tabla+">\n");
    while (rs.next()) {
        out.write("    <"+elemento+">\n");
        for (int i = 1; i <= rsmd.getColumnCount(); i++) {
           out.write("        <"+rsmd.getColumnLabel(i).toLowerCase()+"><![CDATA[");
           String var=rs.getString(i);
           if (var!=null) {
                out.write(var);
           }
           out.write("]]></"+rsmd.getColumnLabel(i).toLowerCase()+">\n");
        }
        out.write("    </"+elemento+">\n");
    }
    out.write("</"+tabla+">\n");        
}
 
Recibe el ResultSet, el nombre que le queremos dar al elemento XML root y el nombre que le queremos dar al elemento XML de cada registro.
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin