Código de Java - Java JTable cargar consulta PostgreSQL y exportar a Excel o PDF

Imágen de perfil

Java JTable cargar consulta PostgreSQL y exportar a Excel o PDFgráfica de visualizaciones


Java

estrellaestrellaestrellaestrellaestrella(4)
Actualizado el 06 de Marzo del 2016 por Julio (Creado el 16 de Febrero del 2016)
3.666 visualizaciones desde el 16 de Febrero del 2016. Una media de 91 por semana
Seguimos con los ejemplos de Java Swing en este caso vamos a ver dos cosas, la primera es como cargar una consulta a una base de datos utilizando JDBC en un javax.swing.JTable, y en la segunda veremos como exportar el contenido del javax.swing.JTable a Excel con un método genérico, es decir, válido para cualquier JTable usando Apache Poi Java API para Excel, en las nueva versiones añadimos exportación automática a PDF e impresión directa.

Versión 1.2: añadimos Toolbar y exportación a PDF
JFrameJTableDatabaseToExcel-V_1_2-Final-02


Vamos a crear un clase con un constructor al que le podamos pasar por parámetros los datos para cargar en un <span class="code-java-b">javax.swing.JTable</span> cualquier consulta, una vez hecho esto crearemos un botón que nos permita exportar los datos cargados a una hoja <span class="code-file">Excel</span>.

Así definimos nuestra clase con las siguientes condiciones:

Constructor: pasaremos por parámetros la consulta, los nombres de las columnas a presentar, el tipo de datos de cada columna, y por último, el ancho que ocupará cada una en la presentación.

Conexión a la base de datos: utilizamos JDBC para conectar con la base de datos y obtener los resultados de la consulta.

DefaultTableModel: el modelo de datos de la tabla será variable y adaptable a cada consulta que se pase por parámetros con las condiciones especificadas anteriormente en el constructor, esto implica que para cada consulta se construirá automáticamente un javax.​swing.​table.​DefaultTableMode adaptado para cargar la consulta en el javax.swing.JTable.

Carga de la consulta: para facilitar la comprensión del ejemplo fijaremos una conexión a una base de datos PostgreSQL(http://codigoxules.org/postgresql/), incluiremos todas las acciones necesarias para la carga en este método, para que en otros ejemplos posteriores se pueda usar como método de actualización de la tabla.

Exportar a Excel: crearemos un botón para ejecutar la acción de exportación, para ello crearemos un método genérico que se pueda reutilizar con cualquier javax.swing.JTable

Impresión directa (Versión 1.1): añadimos un nuevo botón para imprimir automáticamente y de forma sencilla el contenido de cualquier JTable directamente por la impresora del sistema utilizando el método de JTable print.

Toolbar botones (Versión 1.2): En está nueva versión actualizamos la clase para añadir exportación automática a PDF y pasar todos los botones de funcionalidades a un Toolbar añadiendo imágenes a los botones.

Exportar a PDF (Versión 1.2): crearemos un botón para ejecutar la acción de exportación del JTable a iText PDF, para ello crearemos un método genérico que se pueda reutilizar con cualquier javax.swing.JTable, para obtener información más detallas puedes leer el artículo: Java iText PDF – Creando un pdf en Java con iText(http://codigoxules.org/java-itext-pdf-creando-pdf-java-itext/), y consultar el ejemplo publicado en LWP de Java JTable exportar a PDF con iText (http://lwp-l.com/s3452).


Espero que te sea útil.

Requerimientos

Tecnologías utilizadas
Apache Poi Java API para Excel (http://codigoxules.org/java/java-excel/)
Java iText PDF – Creando un pdf en Java con iText (http://codigoxules.org/java-itext-pdf-creando-pdf-java-itext/).
Consultar el ejemplo publicado en LWP de Java JTable exportar a PDF con iText (http://lwp-l.com/s3452).

1.0

Actualizado el 17 de Febrero del 2016 (Creado el 16 de Febrero del 2016)gráfica de visualizaciones de la versión: 1.0
584 visualizaciones desde el 16 de Febrero del 2016. Una media de 14 por semana

1.1
estrellaestrellaestrellaestrellaestrella(1)

Actualizado el 20 de Febrero del 2016 (Creado el 19 de Febrero del 2016)gráfica de visualizaciones de la versión: 1.1
904 visualizaciones desde el 19 de Febrero del 2016. Una media de 28 por semana

1.2
estrellaestrellaestrellaestrellaestrella(3)

Actualizado el 07 de Marzo del 2016 (Creado el 06 de Marzo del 2016)gráfica de visualizaciones de la versión: 1.2
2.179 visualizaciones desde el 06 de Marzo del 2016. Una media de 56 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

En está nueva versión actualizamos la clase para añadir exportación automática a PDF y pasar todos los botones de funcionalidades a un Toolbar añadiendo imágenes a los botones.

Exportar a PDF: crearemos un botón para ejecutar la acción de exportación del JTable a iText PDF, para ello crearemos un método genérico que se pueda reutilizar con cualquier javax.swing.JTable, para obtener información más detallas puedes leer el artículo: Java iText PDF – Creando un pdf en Java con iText(http://codigoxules.org/java-itext-pdf-creando-pdf-java-itext/), y consultar el ejemplo publicado en LWP de Java JTable exportar a PDF con iText (http://lwp-l.com/s3452).


El resultado final será:

JFrameJTableDatabaseToExcel-V_1_2-Final-02

Código para exportar a PDF:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
    /**
     * Explanation of the method by which we read the JTable we pass as
     * parameter, and where we copy its content in a PDF passed 
     * as a parameter.
     * Método con el que leemos cualquier JTable que pasamos como
     * parámetro, y donde copiamos su contenido en un PDF que se pasa 
     * como parámetro. 
     *
     * @param jTable <code>JTable</code> 
     *      the JTable we are going to extract to excel 
     *      El Jtable que vamos a extraer a excel.
     * @param pdfNewFile <code>String</code> 
     *      pdf File we are going to write. 
     *      Fichero pdf en el que vamos a escribir. 
     * @param title <code>String</code> 
     *      title
     *      Título 
     */
    public void utilJTableToPdf(JTable jTable, File pdfNewFile, String title){
        try {
            // We create the document and set the file name.        
            // Creamos el documento e indicamos el nombre del fichero.
            Document document = new Document();
            try {
                PdfWriter.getInstance(document, new FileOutputStream(pdfNewFile));
            } catch (FileNotFoundException fileNotFoundException) {
                System.out.println("No such file was found to generate the PDF (No se encontró el fichero para generar el pdf)" + fileNotFoundException);
            }
            document.open();
            // We add metadata to PDF
            // Añadimos los metadatos del PDF
            document.addTitle("Table export to PDF (Exportamos la tabla a PDF)");
            document.addSubject("Using iText (usando iText)");
            document.addKeywords("Java, PDF, iText");
            document.addAuthor("Código Xules");
            document.addCreator("Código Xules");
 
            // First page (Primera página)
            Anchor anchor = new Anchor("Table export to PDF (Exportamos la tabla a PDF)", categoryFont);
            anchor.setName("Table export to PDF (Exportamos la tabla a PDF)");
 
            // Second parameter is the number of the chapter (El segundo parámetro es el número del capítulo).
            Chapter catPart = new Chapter(new Paragraph(anchor), 1);
 
            Paragraph subPara = new Paragraph("Do it by Xules (Realizado por Xules)", subCategoryFont);
            Section subCatPart = catPart.addSection(subPara);
            subCatPart.add(new Paragraph("This is a simple example (Este es un ejemplo sencillo)"));
 
            // Create the table (Creamos la tabla)
            PdfPTable table = new PdfPTable(jTable.getColumnCount());
 
            // Now we fill the rows of the PdfPTable (Ahora llenamos las filas de PdfPTable)
            PdfPCell columnHeader;
            // Fill table columns header 
            // Rellenamos las cabeceras de las columnas de la tabla.                
            for (int column = 0; column < jTable.getColumnCount(); column++) {
                columnHeader = new PdfPCell(new Phrase(jTable.getColumnName(column)));
                columnHeader.setHorizontalAlignment(Element.ALIGN_CENTER);
                table.addCell(columnHeader);
            }
            table.setHeaderRows(1);
            // Fill table rows (rellenamos las filas de la tabla).                
            for (int row = 0; row < jTable.getRowCount(); row++) {
                for (int column = 0; column < jTable.getColumnCount(); column++) {
                    table.addCell(jTable.getValueAt(row, column).toString());
                }
            }
            subCatPart.add(table);
 
            document.add(catPart);
 
            document.close();
            JOptionPane.showMessageDialog(this.jPanelQuery, "Your PDF file has been generated!(¡Se ha generado tu hoja PDF!)",
                    "RESULTADO", JOptionPane.INFORMATION_MESSAGE);
        } catch (DocumentException documentException) {
            System.out.println("The file not exists (Se ha producido un error al generar un documento): " + documentException);
            JOptionPane.showMessageDialog(this.jPanelQuery, "The file not exists (Se ha producido un error al generar un documento): " + documentException,
                    "ERROR", JOptionPane.ERROR_MESSAGE);
        }
 
    }

Espero que te resulte útil.

Si alguno de los archivos de descarga no funciona, comentanos aquí el error.




Comentarios sobre la versión: 1.2 (3)

Imágen de perfil
Ing. Domenico
08 de Marzo del 2016
estrellaestrellaestrellaestrellaestrella
muy bueno
Responder
Sabas
30 de Marzo del 2016
estrellaestrellaestrellaestrellaestrella
Hola amigo, muy interesante tu codigo, estoy empezando a dar primeros pasos, donde puedo descargar el codigo para la conexion a postgress, solo veo el de la conversion de los datos a pdf.

Saludos cordiales
Responder
Imágen de perfil
Julio
01 de Abril del 2016
estrellaestrellaestrellaestrellaestrella
Hola Sabas.

Esta todo incluido en el fichero zip en único fichero, para facilitar el aprendizaje está todo incluido dentro de la misma clase: JFrameJTableDatabaseToExcelPdfPrintExample.java incluido en el archivo zip para descargar.

En el código encontrarás las explicaciones de lo que hace cada método, para informarte de como funciona la conexión a PostgreSQL con más detalle lo puedes ver en la publicación en mi blog: http://codigoxules.org/java-jtable-cargar-consulta-postgresql-exportar-excel/ , que comparte el mismo código.

A continuación, te muestro el código de la conexión que como te dije puedes encontrar en la clase:

[code]
/**
* Method to connect to the database by passing parameters.
* Método para establecer la conexión a la base de datos mediante el paso de parámetros.
*
* @param host <code>String</code> host name or ip. Nombre del host o ip.
* @param port <code>String</code> listening database port. Puerto en el que escucha la base de datos.
* @param database <code>String</code> database name for the connection. Nombre de la base de datos para la conexión.
* @param user <code>String</code> user name. Nombre de usuario.
* @param password <code>String</code> user password. Password del usuario.
*/
private boolean connectDatabase(String host, String port, String database,
String user, String password) {
String url = "";
try {
// We register the PostgreSQL driver
// Registramos el driver de PostgresSQL
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException ex) {
System.out.println("Error al registrar el driver de PostgreSQL: " + ex);
}
url = "jdbc:postgresql://" + host + ":" + port + "/" + database;
// Database connect
// Conectamos con la base de datos
setConnection(DriverManager.getConnection(
url,
user, password));
boolean valid = connection.isValid(50000);
System.out.println(valid ? "TEST OK" : "TEST FAIL");
return valid;
} catch (java.sql.SQLException sqle) {
System.out.println("Error al conectar con la base de datos de PostgreSQL (" + url + "): " + sqle);
return false;
}
}

[/code]


Si solo quieres un ejemplo de Java para conectar a base de datos PostgreSQL también lo tienes en detalle aquí: http://codigoxules.org/conectar-postgresql-utilizando-driver-jdbc-java-postgresql-jdbc/

Espero que te guste y te ayude mucho en tu aprendizaje.

Saludos.
Responder

Comentar la versión: 1.2

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s3436