/*
 * DatabaseKontaktMedExc3.java
 * Bruker try-with resources til frigjøring av databaseressurser.
 *
 */

import static javax.swing.JOptionPane.*;
import java.sql.*;
class DatabaseKontaktMedExc3 {
  public static void main(String[] args) {
    String databasedriver = "org.apache.derby.jdbc.ClientDriver";
    Connection forbindelse = null;
    try {
      Class.forName(databasedriver);
      String databasenavn = "jdbc:derby://localhost:1527/dp5;user=dp5;password=dp5";
      forbindelse  = DriverManager.getConnection(databasenavn);
     } catch (Exception e) {
        System.out.println("Feil oppstått ved tilkopling til databasen:\n" + e.getMessage());
        System.exit(0);
     }

    // Opprydder.lukkForbindelse(forbindelse); // for å framprovosere unntak fra createStatement

    // Java7: Ny utgave av try-setningen der vi kan ramse opp ressurser som skal lukkes ved utgang av setningen.
    // Ressursene må tilhøre klasser som implementerer interfacet AutoClosable. Interfacet krever at metoden close() er
    // implementert, og den blir kalt automatisk.
     try (Statement  setning = forbindelse.createStatement();
            ResultSet res = setning.executeQuery("select * from person")) {  // feilstaving av tabellnavn gir unntak fra executeQuery()
        while (res.next()) {
          int persNr = res.getInt("persnr");
          String fornavn = res.getString("fornavn");
          String etternavn = res.getString("etternavn");
          System.out.println(persNr + ": " + fornavn + " " + etternavn);
        }
     } catch (SQLException e) {
       System.out.println("Unntaksobjekt kastet fra " + e.getClass().getSimpleName());
       System.out.println("Full stack trace:");
       e.printStackTrace();
     }

     Opprydder.lukkForbindelse(forbindelse);
   }
 }