/*
 * Beispielprogramm für die Java Database Connectivity (JDBC) und MySQL
 */

import java.sql.*;

public class Demo {
        
    public Demo() {
        
        // konfiguriere Verbindungsdaten (besser in externen Config-File)
        String dbDriver = "com.mysql.jdbc.Driver";
        String dbURL = "jdbc:mysql://localhost/test";
        String dbUser = "user";
        String dbPassword = "";
 
        try {
            // lade jdbc Treiber            
            Class.forName(dbDriver).newInstance();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        
        try {
            // baue Verbindung auf
            Connection con = DriverManager.getConnection(
            dbURL, dbUser, dbPassword);
            
            // lösche ev. vorhandene Tabelle Student
            String dropStmt = "DROP TABLE IF EXISTS Student";
            
            Statement stmt = con.createStatement();
            int success = stmt.executeUpdate(dropStmt);
            if (success != 0) 
                System.err.println("Tabelle kann nicht gelöscht werden.");
                        
            // erstelle Tabelle Student
            String createStmt = "CREATE TABLE Student(" +
                    "Name varchar(25)," +
                    "MatrNr decimal PRIMARY KEY," +
                    "Email varchar(25))";
                        
            success = stmt.executeUpdate(createStmt);
            if (success != 0) 
                System.err.println("Tabelle kann nicht erstellt werden.");
            
            // füge Datensatz in Tabelle Student ein
            String insertStmt = "INSERT INTO Student VALUES " +
                    "(\"Max Mustermann\", 0123456, \"max@mustermann.com\")";
            
            success = stmt.executeUpdate(insertStmt);
            if (success != 1) 
                System.err.println("Datensatz kann nicht eingefügt werden.");
            
            // frage Daten wieder ab
            String selectStmt = "SELECT * FROM Student";
            
            ResultSet rs = stmt.executeQuery(selectStmt);
            while (rs.next()) {
                System.out.printf("%-8s %s \n", "Name:", rs.getString(1)); 
                        // auch möglich: rs.getString("Name");
                System.out.printf("%-8s %07d \n", "MatrNr.:", rs.getInt(2));
                System.out.printf("%-8s %s \n", "Email:", rs.getString(3));
            }
            
            System.out.println("");
            
            // Struktur der Tabelle Student auslesen - ähnlich SQL: DESCRIBE Student
            ResultSetMetaData metaData = rs.getMetaData();            
            int colCount = metaData.getColumnCount();
            
            for (int i=1; i<=colCount; i++) {
                System.out.printf("Name: %s, Type: %s \n", 
                        metaData.getColumnName(i),                         
                        metaData.getColumnTypeName(i));
                        // weitere Details möglich...
            }
            
            // Verbindung schließen
            stmt.close();
            rs.close();
            con.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        Demo demo = new Demo();
    }
    
}

