package javacodebook.jdbc.datasources;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.postgresql.jdbc2.optional.SimpleDataSource;

public class DataSourceExample {

    public static void main(String[] args) {
        try {
            // Die DataSource wird hier durch eine lokale Methode
            // übergeben
            DataSource datasource = getDataSource();

            // Analog zu DriverManager holt man sich eine
            // Connection aus der DataSource - allerdings kann
            // man davon ausgehen, dass alle Verbindungsdaten
            // der DataSource bereits bekannt sind
            Connection con = datasource.getConnection();
            DatabaseMetaData data = con.getMetaData();

            System.out.println(
                "Connected to " + data.getDatabaseProductName());

            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Diese Methode liefert eine verbundene DataSource
     * @return DataSource
     * @throws SQLException
     */
    public static DataSource getDataSource() throws SQLException {
        // Der JDBC-Treiber von PostgreSQL liefert eine einfache
        // Implementierung von DataSource. Hier die entsprechende
        // Klasse des eigenen JDBC-Treibers einsetzen
        SimpleDataSource source = new SimpleDataSource();
        source.setDatabaseName("test");
        source.setServerName("localhost");
        source.setUser("postgres");
        source.setPassword("postgres");
        return source;
    }
}
