Instalar JDK Linux


Estuve instalando jdk para Debian y Fedora y voy a colocar lo que hice tanto para instalar el JDK y configurar la variable JAVA_HOME:

Debian:
1 - Entrar el sitio de Oracle y descargar la versión que vamos a usar.
      Aquí están todas:
        Índice de descarga
     y acá la que voy a usar en esta entrada
        jdk-6u30-download-1377139
2 - Utilizando el comando su nos identificamos como root.

3 - Crear el directorio java:
     mkdir /usr/java
4 - Le damos permiso al usuario como dueño:
       Con la siguiente instrucción le decimos que cambie el nuevo dueño a arielb 
       para el directorio /usr/java/ y que nos muestre un mensaje de lo que cambia (-c) 
       y que lo haga de forma recursiva (-R).
chown -cR arielb /usr/java/
    Recuerda cambiar arielb por tú usuario.
5 - Vamos a colocar el archivo binario que descargamos del sitio de Oracle.
      Con esta instrucción le decimos que nos copie(cp) y nos muestre(-v) lo que está copiando.
cp -v /home/arielb/Descargas/jdk-6u30-linux-x64.bin /usr/java/
6 - El siguiente paso es darle permiso de ejecución:
     Con esta instrucción le decimos que le de permiso(chmod) de ejecución(x) al binario para todos los usuarios(a).
     chmod a+x /usr/java/jdk-6u30-linux-x64.bin
7 - Nos colocamos en el directorio donde está el binario.
      cd /usr/java/
8 - Ejecutamos el binario.
    ./jdk-6u30-linux-x64.bin

9 - Como último paso editaremos el archivo bashrc tanto del usuario root como de nuestro usuario, esto lo haremos para que crear la variable JAVA_HOME de forma permanente.
Primero modificamos nuestro usuario:
   gedit /home/arielb/.bashrc
Al abrir el archivo colocamos lo siguiente:
   export JAVA_HOME=/usr/java/jdk1.6.0_30/
   export PATH=$JAVA_HOME/bin:$PATH



Luego para verificar si las variables fueron bien configuradas puedes escribir:
java -version


Resultado:
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) 64-Bit Server VM (build 20.5-b03, mixed mode)



Fedora:

1 - Descargamos  del sitio de Oracle
     jdk-6u30
2 -  Cambiamos al usuario root:
      su
3 - Le damos los permisos necesarios al archivo:
     chmod a+x  jdk-6u30-linux-x64-rpm.bin
4 -  Ejecutamos:
      ./jdk-6u30-linux-x64-rpm.bin

5 - Configurar las variables JAVa_HOME y PATH.
Para que sea para todos los usuarios lo podemos abriendo el archivo con vi, de la siguiente forma:
vi .bash_profile   //a nivel del usuario
y agregamos:

export JAVA_HOME=/usr/java/jdk1.6.0_30/
export PATH=$JAVA_HOME/bin:$PATH




Leer más...

JasperReport - Agregar Font Microsoft

En esta entrada quiero mostrar como solucionar un error que sale al tratar de cargar un pdf usando jasperreport en linux.
Este error se da por la falta de unas fuentes de microsoft, el conjunto de estas fuentes es conocida como msttcorefonts.

El error que muestra es:
net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Times New Roman' is not available to the JVM. See the Javadoc for more details.

En esta entrada mostraré la solución para debian:

Paso 1: Utilizar una ventana de comando como root e irse a  /etc/apt/sources.list , pueden usar vi, gedit el que sea de su gusto.
Paso 2: Agregar deb http://ftp.de.debian.org/debian lenny main contrib, y guardar el cambios.
Paso 3: Escribir  apt-get update
Paso 4: Escribir apt-get install ttf-mscorefonts-installer

Esto solucionará el error mostrado anteriormente.
Leer más...

Jar externos con netbeans

Cuando programamos difícilmente nos escapamos de utilizar un jar , ya sea para la conexión a la base datos, leer xml,  enviar correos en fin, y si no estamos muy prácticos con el IDE, cualquiera que sea, no vamos a saber donde se añade. Es por eso que estaré creando una entrada que mostrará como agregarlo en Netbeans y para agregarlo con Eclipse.

Empezaré con Netbeans:


Para utilizar un jar externo en netbean hay que agregarlo al IDE como una biblioteca.
1 – Ir al menú Tools/Libraries.












El resultado del menú anterior es el Administrador de Biblioteca, en donde nos muestras las bibliotecas agregadas, en defecto, por el IDE y en adelante las que agregaremos nosotros.
2 –El siguiente paso es ir al botón New Library
El resultado del paso anterior es la pantalla para darle un nombre a la biblioteca que vamos agregar. Este es un nombre simbólico que solo es para guía al buscar y diferenciarla de las demás.
   








3 - Luego de colocarle el nombre que consideremos, presionamos OK.
















El paso anterior nos lleva nuevamente al Administrador de Bibliotecas con el nombre creado pero sin ninguna referencia a ningún jar.
También podemos observar en la imagen que se habilitaron 3 pestañas, la que usaremos es la de Classpath.
















4 – El siguiente paso es presionar el botón Add JAR/Folder y seleccionar el jar en la ruta que se encuentra. Es preferible que el jar se encuentre en una ruta sin espacios.
El resultado del paso anterior es donde nos saldrá la sección de Classpath con las rutas absolutas del o los jar agregados.













Ya con los 5 pasos anteriores hemos creado una referencia a nivel del IDE. Pero esto no es suficiente para que podamos usar las clases que se encuentran en el jar.
Lo siguiente que haremos es agregar la referencia de la biblioteca al proyecto.
1 – Buscar la carpeta de nombre Libraries creada por defecto por el IDE, presionar el botón derecho sobre la carpeta e ir al menú Add Library














El paso anterior nos llevará a una pantalla que contiene la lista de las bibliotecas disponibles.
2 – Seleccionar la biblioteca que ya hemos creado y presionar el botón Add Library.




















El resultado final será la biblioteca que habíamos creado anteriormente ya está adjunta al proyecto.
Con esto ya podemos usar las clases que se encuentran en el o los jar.











Leer más...

Blob - Insertar y Actualizar Archivo en campo blob. Oracle, Mysql

En ocaciones nos vemos en la necesidad de guardar una imagen, un pdf, etc. en la base datos y  así mismo extraerlo, por lo tanto en esta entrada les mostraré de una forma genérica como hacerlo, el código fuente fue probado en Oracle y Mysql, trataré de probarlo en postgresql. Las versiones de los drivers en las distintas base datos son:
- Oracle: ojdbc14.jar.
- Mysql : mysql-connector-java-5.1.18-bin.jar
Cuando escribo "genérica" me refiero a no usar una clase especifica del driver correspondiente  a la base datos.
Para mostrar como hacerlo he creado un grupo de clases que son:
- Conexion: Esta clase se encarga de la parte de la conexión.
- Archivos: Esta clase contiene dos métodos escribir y obtenerArchivo, que son los encargados de escribir el archivo en la tabla y de obtener el archivo de la tabla en el orden correspondiente.
- ObtenerPropiedades: Esta clase fue creada para leer el archivo de propiedades. 
Las propiedades  contienen los datos tanto como la clase de conexión del driver y los datos necesarios de  acceso como URL, usuario, contraseña.
- PropertyException:Esta clase fue creada para manejar las excepciones si no se encuentra  alguna propiedad requerida. 
- Datosblob: Esta clase fue creada como clase principal o de ejecución. En donde para guardar  un archivo nos mostrará un ventana de selección de archivo.
Exported from Notepad++
public int escribir(String nombre, String rutaArchivo) { InputStream entrada = null; PreparedStatement pst = null; int ingresados = 0; try { File archivo; String insert; establecerConexion(); getCon().setAutoCommit(false); insert = "Insert into ARCHIVOS values(?,?)"; pst = getCon().prepareStatement(insert); archivo = new File(rutaArchivo); entrada = new FileInputStream(archivo); pst.setString(1, nombre.toUpperCase()); pst.setBinaryStream(2, entrada, (int) archivo.length()); ingresados = pst.executeUpdate(); getCon().commit(); } catch (FileNotFoundException ex) { Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException ex) { Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex); } finally { try { if (entrada != null) { entrada.close(); } } catch (IOException ex) { Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex); } try { if (pst != null) { pst.close(); } } catch (SQLException ex) { Logger.getLogger(Archivos.class.getName()).log(Level.SEVERE, null, ex); } } return ingresados; } public boolean obtenerArchivo(String nombreArchivoBuscar, String nombreArchivoSalida) { InputStream salida = null; try { PreparedStatement pst; ResultSet rs; Blob blob; FileOutputStream archivoSalida; String select; byte[] arreglo; int byteLeidos = 0; establecerConexion(); getCon().setAutoCommit(false); select = "select ARCHIVO from ARCHIVOS WHERE NOMBRE=?"; pst = getCon().prepareStatement(select); pst.setString(1, nombreArchivoBuscar); rs = pst.executeQuery(); if (rs != null) { rs.next(); blob = rs.getBlob(1); salida = blob.getBinaryStream(); arreglo = new byte[2048]; archivoSalida = new FileOutputStream(nombreArchivoSalida); while ((byteLeidos = salida.read(arreglo)) > -1) { archivoSalida.write(arreglo, 0, byteLeidos); } return true; } else { return false; } } catch (IOException ex) { Logger.getLogger(Datosblob.class.getName()).log(Level.SEVERE, null, ex); return false; } catch (SQLException ex) { Logger.getLogger(Datosblob.class.getName()).log(Level.SEVERE, null, ex); return false; } finally { try { if (salida != null) { salida.close(); } } catch (IOException ex) { Logger.getLogger(Datosblob.class.getName()).log(Level.SEVERE, null, ex); } } }
Adjunto los fuentes utilizados.


El que no ama,no ha conocido a Dios;
porque Dios es amor
1ra Juan 4:8






Descargar Fuentes
Leer más...

Escribir en libro excel existente - POI

En esta entrada se hablará de como poder escribir en un libro excel ya existente, agregando un registro y copiando el estilo de un registro anterior.

Para aplicar esto usaremos la librería POI, librería del cual ya se hiso una introducción en la entrada
Leer excel -POI
Para hacer funcional nuestro ejemplo crearemos las siguientes clases :

1 -ManipularLibros: creada en la entrada de leer excel. Como ya vimos en la entrada de leer excel la esta clase nos permite tomar un libro y cargarlo en un objeto POIFSFileSystem para poder manipularlo, obtener una hoja en específico del libro.

2 - ManipularHoja: Clase que hereda de la clase ManipularLibros. Esta clase nos permite tomar usar la hoja y manipularla por registros y celdas.

3 - EscribirExcel:Clase que hereda de la clase ManipularHoja. Con esta clase le agregaremos registros al libro existente celda por celda y copiando el estilo de la celda que necesitamos.

En la clase ManipularHoja se creó dos métodos que son:
1- cantidadRegistros(): Este método tomara la hoja y revisará los registros y nos retornará la cantidad exacta, como la númeración empieza por cero se hizo 1 + 1.

Exported from Notepad++
public int cantidadRegistros() { int cantidad = 0; Iterator registros = hoja.rowIterator(); while (registros.hasNext()) { cantidad = registros.next().getRowNum() + 1; } return cantidad; }

2- obtenerEstiloCelda(int indiceRegistro, int indiceCelda): Este método nos permite obtener el estilo completo de una celda determinada.
La numeración empieza desde cero.
Exported from Notepad++
public HSSFCellStyle obtenerEstiloCelda(int indiceRegistro, int indiceCelda) { HSSFRow registros = hoja.getRow(indiceRegistro); HSSFCellStyle estilo = registros.getCell(indiceCelda).getCellStyle(); return estilo; }

En la clase EscribirExcel se creó un método escribir(String strArchivoIn, int intIndice), esté método nos permite tomar un libro a partir de la ruta absoluta y el índice la hoja indicada.
Luego creamos una clase principal que contenga el método main con las siguientes líneas:


Exported from Notepad++
public static void main(String arg[]) { EscribirExcel escribe = new EscribirExcel(); escribe.escribir("/home/ariel/blog/fuentesjava/excel-POI/Libro1.xls", 0); }

En esta imagen se mostrará como estaba el libro antes de escribir en el.

En esta imagen se mostrará como estaba el libro después de escribir en el.
Bueno espero les sirva de ayuda y al final encontraran los fuentes.


Leer más...

JTable - CheckBox seleccionado

En este tema se mostrará cómo podemos cargar un JTable con datos de la base datos y seleccionar los check respectivos.

Al final encontrarás los fuentes, pero sería recomendable que observes unos minutos la explicación de la estructura, si no, igual espero te ayude a lo que buscas :-).

Crearemos una clase para las conexiones, que nos permita establecer las conexiones.

La clase Conexion estará compuesta principalmente por 4 clases del paquete java.sql que son:
- Connection
- DriverManager
- ResultSet
- SQLException

La estructura de la clase Conexion será:


Exported from Notepad++
public class Conexion { private Connection con; private ResultSet rs; /** * Retorna el objeto cargado de la conexión * @return Connection */ public Connection getCon() { ....... } /** * Utilizado para colocar el objeto cargado con la conexión * @param con */ public void setCon(Connection con) { ........ } /** * Utilizado para obtener el objeto con los datos * de la base datos * @return ResultSet */ public ResultSet getRs() { ........ } /** * Utilizado para colocar el objeto con los datos * obtenidos de la base datos * @param rs */ public void setRs(ResultSet rs) { ......... } /** * * Se utiliza para establecer la conexión, * utilizando : * Class.forname("clase.del.proveedor.para.la.base.datos") * y * DriverManager.getConnection(strUrl, strUsuario, strContrasenia) * * @return Connection */ public Connection establecerConexion() { ........ } /** * Utilizado para cerrar la conexión después de cargar los datos */ public void cerrarConexion() { ........ } }

La otra clase que vamos a crear será CargarDatos.
Esta clase la utilizaremos para tomar los datos de la base datos y cargarlos
en un objeto de tipo DefaultTableModel e ir habilitando los check si lo requiere o no.
Esta clae estará compuesta principalmente por 3 clases del paquete java.sql que son:
- PreparedStatement.
- ResultSet.
- SQLException.
Además le agregaremos una sub clase que le llamaremos Escuchar que extenderá de DefaultTableModel, esta subclase nos ayudará determinar en el JTable cuando debe ser un Check y escuchar el evento al momento de seleccionar un registro.
Volviendo a la clase CargarDatos la estructura de esta será así:

Exported from Notepad++
public class CargarDatos { public CargarDatos() { } private Conexion con = null; public DefaultTableModel cargarDatos() { ............ } public void conectar() { } class Escuchar extends DefaultTableModel { .................. } }

En el método cargarDatos() nos encontraremos:
- Que el nombre de las columnas las podemos definir así:

Exported from Notepad++
dfTableModel.addColumn("Código"); dfTableModel.addColumn("nombre"); dfTableModel.addColumn("apellido"); dfTableModel.addColumn("edad"); dfTableModel.addColumn("selección");//corresponde al check

- Que el objeto DefaultTableModel se puede cargar con los datos de la base datos así:

Exported from Notepad++
Object[] fila; String strSelectBd; if (rs != null) { while (rs.next()) { fila = new Object[5]; fila[0] = rs.getString(1); fila[1] = rs.getString(2); fila[2] = rs.getString(3); fila[3] = rs.getString(4); strSelectBd = rs.getString(5); if (strSelectBd.toUpperCase().equals("S")) { fila[4] = Boolean.TRUE; } else { fila[4] = Boolean.FALSE; } dfTableModel.addRow(fila); } }

- Que al momento de verificar los datos que vienen de la base datos para cargalos, ya sea seleccionado o no, se puede hacer así:

Exported from Notepad++
strSelectBd = rs.getString(5); if (strSelectBd.toUpperCase().equals("S")) { fila[4] = Boolean.TRUE; } else { fila[4] = Boolean.FALSE; }

Pasandole true ó false de la clase Boolean.

La siguiente clase que crearemos se llamará DatosTabla que extenderá de JPanel.
Está clase nos servirá para construir un JPanel que contenga un objeto de tipo JTable, Button.


Exported from Notepad++
public class DatosTabla extends JPanel { private JTable tabla; private JScrollPane scrollPane; private JButton boton = new JButton("Aceptar"); private DefaultTableModel dfTablaModel; public DatosTabla(DefaultTableModel dfTabla) { ........ } public void verificarCheck() { ............... } }


Y con el método verificarCheck() se podrá imprimir los datos seleccionados por el usuario mediante el check.

Bueno este ejemplo contiene 4 fuentes que son :
- Conexion.java
- CargarDatos.java
- DatosTabla.java
- DatosTablaMain.java

Para la base datos se creó una tabla que se le llamó usuarios con la siguiente estructura:
- id varchar(8)
- nombre varchar(50)
- apellido varchar(50)
- edad int(8)
- Seleccionado varchar(1)
Coloco los archivos fuentes utilizando para este tema.


Leer más...

Obtener registro seleccionado - JTable

Para esta entrada mostraremos un ejemplo de como saber que registro se ha seleccionado en una tabla con datos.

Las clases que son esenciales para este ejemplo son JTable y TableModel.  
JTable: Esta clase es utilizada para mostrar y editar tablas con 2 dimensiones.
JTable utiliza enteros para referirse tanto a las filas y las columnas, y el uso del método getValueAt (int, int) para recuperar los valores.

Exported from Notepad++
JTable tabla = new JTable(datos, columnas);

TableModel: Esta clase es una clase interfaz que contiene un conjunto de métodos que utilizará con JTable para manipulación de los registros.

Exported from Notepad++
TableModel tablaModelo = (TableModel) tabla.getModel();

Para este ejemplo crearemos dos clases:

1- DatosTabla  
2- DatosTablaMain
 
Exported from Notepad++
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.TableModel; public class DatosTabla extends JPanel { private JTable tabla; private JScrollPane scrollPane; private JButton boton = new JButton("Aceptar"); public DatosTabla(String[] columnas, String[][] datos) { JPanel p = new JPanel(); setLayout(new GridLayout()); tabla = new JTable(datos, columnas); scrollPane = new JScrollPane(tabla); p.add(scrollPane, BorderLayout.PAGE_START); boton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if ("Aceptar".equals(event.getActionCommand())) { verificarDatos(); } } }); p.add(boton); add(p, BorderLayout.CENTER); } public void verificarDatos() { TableModel tablaModelo; tablaModelo = (TableModel) tabla.getModel(); boolean avanzar = true; int registro = tabla.getSelectedRow(); int columna = tabla.getSelectedColumn(); if (registro == -1) { avanzar = false; } else if (columna == -1) { avanzar = false; } if (avanzar) { String strResultado = tablaModelo.getValueAt( tabla.getSelectedRow(), tabla.getSelectedColumn()).toString(); JOptionPane.showMessageDialog(null, "Dato seleccionado : " + strResultado); } else { JOptionPane.showMessageDialog(null, "No se ha seleccionado un registro"); } } }
Exported from Notepad++
import javax.swing.JFrame; public class DatosTablaMain { public static void main(String args[]) { String columnas[] = {"Código", "Nombre"}; String datos[][] = { {"1", "Ariel"}, {"2", "Solocodigo"}, {"3", "Juez"}, {"4", "Nombre4"} }; DatosTabla datosTabla = new DatosTabla(columnas, datos); JFrame form = new JFrame(); form.add(datosTabla); form.setSize(500, 600); form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); form.setVisible(true); } }

La paciencia vence toda resistencia. La cortesía vence toda oposición. Proverbios 25:15




Resultado:
Fuentes:

Leer más...