package javacodebook.jdbc.columns;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class ColumnCount {

    public static void main(String[] args) {
        try {
            Class.forName("org.postgresql.Driver");
            Connection con =
                DriverManager.getConnection(
                    "jdbc:postgresql:test",
                    "postgres",
                    "postgres");
            Statement statement = con.createStatement();
            ResultSet result =
                statement.executeQuery("SELECT * FROM employees");

            // Über das ResultSetMetaData kann man jetzt auf
            // Informationen zu dem ResultSet zugreifen: Bspw. auf
            // die Anzahl der Spalten ...
            ResultSetMetaData resData = result.getMetaData();
            int columnCount = resData.getColumnCount();
            String temp;
            for (int i = 1; i <= columnCount; i++) {
                // ... oder auf den Spaltennamen
                temp = resData.getColumnName(i);

                // Um die Ausgabe tabellarisch zu formatieren, 
                // nutzt das Programm die Information über die
                // Spaltenbreite
                while (temp.length() < 12
                    || temp.length()
                        < resData.getColumnDisplaySize(i)) {
                    temp += " ";
                }
                System.out.print(temp);
            }

            System.out.println();

            // Nachdem nun die Kopfzeile ausgegeben ist
            // geht es nun Zeile fuer Zeile an die Daten
            while (result.next()) {
                for (int i = 1; i <= columnCount; i++) {
                    temp = result.getString(i);
                    if (temp == null)
                        continue;
                    while (temp.length() < 12
                        || temp.length()
                            < resData.getColumnDisplaySize(i)) {
                        temp += " ";
                    }
                    System.out.print(temp);
                }
                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
