Archive for the ‘java’ Category

HowTo: Realizar consultas a una base de datos sqlite desde java.

Sqlite no es un gestor de bases de datos como MySql, Oracle o PostgreSql sino que, es una librería que permite tener una base de datos transaccional en un archivo sin necesidad de un servidor o configuración alguna lo cual puede llegar a ser muy útil para cierto tipo de proyectos que no requieran un servidor dedicado de base de datos.

Para poder utilizar este tipo de bases de datos como nuestra capa de persistencia en java todo lo que necesitamos es la librería (jar) o “driver” que puede ser descargado desde aquí.

Una vez descargada la librería de sqlite para java, podemos agregarlo a nuestro buildpath si es que estamos usando una IDE como eclipse o netbeans o agregarlo al classpath al momento de compilar la aplicación.

Para realizar la conexión únicamente necesitamos agregar las siguientes lineas:


  Class.forName("org.sqlite.JDBC");
  Connection conn = DriverManager.getConnection("jdbc:sqlite:sqliteFile");
 
  • La primera linea se encarga de cargar la clase de la librería sqlite.
  • La segunda linea crea una conexión a la base de datos auto contenida (archivo).
  • “sqliteFile” es la ruta completa del archivo (ej. /opt/base1.sqlite) que contiene o contendrá la base de datos, si el archivo no existe sera creado eh inicializado y si ya existe sera usado.

Una vez creada la conexión podemos usarla para acceder a la base de datos.


  PreparedStatement ps = null;
  ps = conn.prepareStatement("insert into tabla1 values (?);");
  ps.setInt(1,10);
  ps.execute();
  ps.close();
 

Hay que tomar en cuenta que por el carácter de este tipo de bases de datos no se puede escribir cuando se tiene un flujo de lectura abierto o leer cuando se tiene un flujo de escritura abierto, es decir, al realizar una transacción en la base de datos esta se bloquea hasta que la transacción se cierra por lo que es muy importante cerrar dicha transacción tan pronto como sea posible.
Se recomienda hacer uso de los prepared statements y de los batch y realizar todas las transacciones de una sola vez.


  PreparedStatement ps = null;
  ps = conn.prepareStatement("insert into tabla1 values (?);");
  for(int i=0; i < 20 ; i++){
    ps.setInt(1,i);
    ps.addBatch();
  }
  conn.setAutoCommit(false);
  ps.executeBatch();
  conn.commit()
  ps.close();
 

Tambien hay que recordar cerrar los ResultSet en cuanto se terminen de usar.


  PreparedStatement ps = conn.prepareStatement("SELECT * FROM tabla1");
  ResultSet rs = ps.executeQuery();
  while(rs.next()){
    System.out.println(rs.getString(1));
  }
  rs.close();
 

Para finalizar dejare el codigo de un ejemplo completo:


/** @author cool2k
* fecha 05/JUN/2009
*
* Ejemplo para crear una base de datos con la libreria sqlite y crear algunas entradas.
*
*/

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class sqlite {

private sqlite(){}

/**
*
* @param args
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void main(String[] args)
throws ClassNotFoundException, SQLException{
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:/tmp/db1.sqlite");
PreparedStatement ps = null;

conn.prepareStatement("create table tabla1(id,nombre,apellido,telefono)").execute();
conn.prepareStatement("create table tabla2(id,usuario,password,email)").execute();

conn.setAutoCommit(false);

ps = conn.prepareStatement("insert into tabla1 values(?,?,?,?)");
ps.setInt(1, 1);
ps.setString(2, "Juan");
ps.setString(3, "Perez");
ps.setString(4, "55123456");
ps.addBatch();
ps.setInt(1, 2);
ps.setString(2, "José");
ps.setString(3, "Peres");
ps.setString(4, "55345612");
ps.addBatch();
ps.setInt(1, 3);
ps.setString(2, "Ana");
ps.setString(3, "Perez");
ps.setString(4, "55561234");
ps.addBatch();
ps.executeBatch();
conn.commit();
ps.close();

ps = conn.prepareStatement("insert into tabla2 values(?,?,?,?)");
ps.setInt(1, 1);
ps.setString(2, "jperez");
ps.setString(3, "mypass");
ps.setString(4, "j.perez@correo.com");
ps.addBatch();
ps.setInt(1, 2);
ps.setString(2, "joperes");
ps.setString(3, "mypass2");
ps.setString(4, "jose.peres@correo.com");
ps.addBatch();
ps.setInt(1, 3);
ps.setString(2, "aperez");
ps.setString(3, "mypass3");
ps.setString(4, "ana@correo.com");
ps.addBatch();
ps.executeBatch();
conn.commit();
ps.close();

conn.close();

}
}
 

Espero que esta entrada les sea de ayuda.
Saludos !!

HowTo: Habilitar un puerto seguro en un servidor Apache Tomcat.

Para Habilitar el puerto seguro (https) en tomcat se necesitan 2 cosas; crear un certificado y modificar el archivo de configuración del tomcat.

Crear certificado.

Para generar las llaves necesitamos usar la herramienta “keytool” que se encuentra dentro del directorio en donde esta instalado java y ahí encontraremos la herramienta keytool en la ruta “/java/bin/keytool”.

  1. Primero necesitamos generar una llave y un keystore, para ello usamos el comando:

      keytool -keystore myks.ks -genkeypair – alias mycert
     

    Este comando generara una llave llamada “mycert” y las almacenara en un keystore (almacén) llamado “myks.ks”, sí el almacén no existe lo generara.

  2. En este punto nos debe pedir la contraseña para el almacén.

      Escriba la contraseña del almacén de claves:
     
  3. Despues nos pide los datos para la llave que se generara:

      ¿Cuáles son su nombre y su apellido?
        X1
      ¿Cuál es el nombre de su unidad de organización?
        X2
      ¿Cuál es el nombre de su organización?
        X3
      ¿Cuál es el nombre de su ciudad o localidad?
        X4
      ¿Cuál es el nombre de su estado o provincia?
        X5
      ¿Cuál es el código de país de dos letras de la unidad?
        MX
     
  4. Despues de proporcionar estos datos nos pregunta si la informacion es correcta, a loque tenemos que responder si o no (yes o no en el caso de que este en ingles).

      ¿Es correcto CN=X1, OU=X2, O=X3, L=X4, ST=X5, C=MX?
     
  5. De ser correcta lnos pide una clave para la llave que acabamos de generar, puede ser lamisma del keystore (recomendable) o puede ser otra (tomcat requerirá mayor configuración).

      Escriba la contraseña para la clave (INTRO si es la misma contraseña que la del almacén de claves):
     
  6. Despues de Proporcionar esta clave se generara la llave y quedara almacenada, para desplegarla podemos usar este comando:

      keytool -keystore myks.ks -list
     
  7. Despues de proporcionar la clave que asignamos para el almacén nos mostrara la información.

      Escriba la contraseña del almacén de claves:

      Tipo de almacén de claves: JKS
      Proveedor de almacén de claves: SUN

      Su almacén de claves contiene entrada 1

      mycert, 3/09/2008, PrivateKeyEntry,
      Huella digital de certificado (MD5): CB:31:21:87:25:B4:38:5B:E1:97:C1:BC:28:D0:85:E0  
     

  8. En este punto ya podemos copiar el archivo myks.ks a la carpeta del tomcat.

Configurar Tomcat.

Una vez que tenemos el keystore en el directorio del tomcat (/tomcat/myks.ks) hay que modificar el archivo server.xml que se encuentra en “/tomcat/conf/server.xml” de la siguiente forma.
Buscar la parte “<Connector port=”8443″ ” y sí esta comentada la descomentamos y depues la editamos para que quede de la siguiente forma:


  <Connector port="8443" maxHttpHeaderSize="8192"
     maxThreads="150" minSpareThreads="25"
     maxSpareThreads="75"
     enableLookups="false" disableUploadTimeout="true"
     acceptCount="100" scheme="https" secure="true"
     clientAuth="false" sslProtocol="TLS"
     keystorePass = "123123"
     keystoreFile = "myks.ks"
  />  
 

Sí el password de la llave es diferente al del almacén de llaves tenemos que agregar esta propiedad a la configuración anterior:


  keypass="pwd de la llave"
 

Sí el almacén de llaves contiene más de una llave y queremos especificar una en especifico usamos el alias de la llave y agregamos esta propiedad a la configuración del puerto:


  keyAlias="alias de la llave"
 

En este ejemplo tenemos un keystore llamado myks.ks en el directorio raiz del tomcat (/tomcat/myks.ks) y el password para el keystore es 123123; El puerto que ah quedado configurado para que podamos accesar al servidor por un canal seguro es el 8443, los demas valores son valores estandar y deben de quedar igual que como el ejemplo.

Si queremos restringir el servidor para que solos sea accesible por medio de este puerto, buscamos la sección “<Connector port=”8080″ ” y la dejamos comentada.


  <!-- <Connector port="8080" maxHttpHeaderSize="8192"
     maxThreads="150" minSpareThreads="25"
     maxSpareThreads="75"
     enableLookups="false" acceptCount="100"
     connectionTimeout="20000" disableUploadTimeout="true" /> -->  
 

Con esto ya tenemos configurado el apache tomcat para que funcione con puerto seguro, si el servidor esta corriendo hay que reiniciarlo para que aplique las nuevas configuraciones.

Saludos!

How To: Instalar java en Ubuntu.

Hoy en día el proceso de instalación de java (jdk o jre) es muy sencillo en una distribución Ubuntu cuya versión actual estable es la 8.04 (Hardy Heron). Podemos optar por instlar la version de sun (java-sun) o instalar la versión openjdk (opensource) que ya esta certificada y es totalmente compatible con la versión de sun.

Hay dos formas de hacerlo:

Consola:

Para el ambiente de ejecución. (sun)


  sudo apt-get install sun-java6-jre
 

Para el ambiente de ejecución y el de desarrollo. (sun)


  sudo apt-get install sun-java6-jdk
 

Para el ambiente de ejecución. (opensource)


  sudo apt-get install openjdk-6-jre
 

Para el ambiente de ejecución y el de desarrollo. (opensource)


  sudo apt-get install openjdk-6-jdk
 

Ambiente gráfico:

  • Abrimos el gestor de paquetes synaptic (Menú Sistemas >> Administración >> Gestor de paquetes Synaptic).
  • boton buscar

  • Hacemos click en el botón buscar y tecleamos “java sun” o “openjdk” según sea nuestro interés.
  • buscar paquete

  • Hacemos doble click a los paquetes de nuestro interés, para el ambiente de ejecución solo seleccionamos sun-java6-jre ( o openjdk-6-jre )o si queremos también el ambiente de desarrollo hacemos doble click sun-java6-jdk ( o openjdk-6-jdk ). En cualquier caso aceptamos los paquetes adicionales que requiera instalar.
  • buscar paquete

  • Hacemos click en el botón aplicar y listo.
  • buscar paquete

    Y listo !!, tendremos java habilitado y configurado en nuestro Ubuntu.

    P.D.

    Si no encontraran los paquetes puede ser que no tengan habilitados los repositorios necesarios, para solucionar esto hay que habilitar el repositorio universe ( Menu: Configuración >> Repositorios) y dar click en el botón recargar

    buscar paquete

    Saludos!!