import java.sql.*;
import java.io.*;

public class ResultSetExample {
  // String, der die DB-Verbindung beschreibt.
  private static final String CONNECT_URL = "jdbc:oracle:oci8:@lsintern-db";
  
  public static void main(String[] argv) {
    // ------------------------------------------------------------
    // -- Variablen
    // ------------------------------------------------------------

    BufferedReader in =     // Reader für Consoleneingabe
      new BufferedReader(new InputStreamReader(System.in));

    Connection conn = null; // Verbindung zu Oracle
    Statement sql_stmt = null;        // Anfrage
    String name = null;     // user für Verbindung
    String passwd = null;   // passwd für Verbindung

    // ------------------------------------------------------------
    // -- Code
    // ------------------------------------------------------------

    // Benutzeridentifikation und Authentisierung
    try {
      System.out.println("Benutzername: (/ = \"identified externally\"):");
      name = in.readLine();
      if (!name.equals("/")) {
        System.out.println("Passwort:");
        passwd = in.readLine();
      } 
    }
    catch (IOException e) {
      System.out.println("Fehler beim Lesen der Eingabe: " + e);
      System.exit(-1);
    }
    
    // Initialisierung der Datenbankverbindung und der Anfrage
    try {
      System.out.println("Verbindungsaufbau zu: " + CONNECT_URL);
      Class.forName("oracle.jdbc.driver.OracleDriver");

      if (passwd == null)
        conn = DriverManager.getConnection(CONNECT_URL);
      else
        conn = DriverManager.getConnection(CONNECT_URL, name, passwd);

      conn.setAutoCommit(false); 

      sql_stmt = conn.createStatement();
    }
    catch (Exception e) {
      System.err.println("Folgender Fehler ist bei der Initialisierung aufgetreten: " + e);
      System.exit(-1);
    }
    
    // Datenbankanfragen
    
    // select avg(semester) from studenten
    try {
      ResultSet rset = sql_stmt.executeQuery("select avg(semester) from studenten");
      rset.next();
      System.out.println("Durchschnittsalter: " + rset.getDouble(1));
      rset.close();
    }
    catch(SQLException se) {
      System.out.println("Error: " + se);
    }

    // select name, raum from professoren where rang = 'C4'
    try {
      ResultSet rset = sql_stmt.executeQuery("select name, raum from professoren where rang = 'C4'");
      System.out.println("C4-Professoren:");
      while(rset.next())
      {
        System.out.println(rset.getString("name") + " " + rset.getInt("raum"));
      }
      rset.close();
    }
    catch(SQLException se) {
      System.out.println("Error: " + se);
    }

    // Aufräumen
    try {
      sql_stmt.close();
      conn.close();
    } 
    catch (SQLException e) {
      System.out.println("Fehler beim Schliessen der DB-Verbindung: " + e);
    }
  }
}
