package paketBMIDB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Datenbankzugriff 
{
// Variablen für den Verbindungsaufbau und den Datenbankzugriff
Connection conn = null;   //Verbindungsobjekt
String mDB;               //Variable für den Treiber und den Pfad zur DB 
Statement stmtSQL = null; //Objekt für die Ausführung von SQL-Anweisungen 
String mSQL ;             //Variable zur Aufnahme der SQL-Statements
Person einePerson;
ResultSet ergebnisMenge = null;


 // Konstruktor  
 public Datenbankzugriff() 
 {
 
 }


 // Nicht öffentliche Methoden der Klasse Datenbankzugriff
 private void oeffneDB()  
 {
    // DriverManager
    try
    {	
       Class.forName("com.mysql.jdbc.Driver");
    }
    catch(Exception e)
    {
       System.out.println("Driver: " + e.getMessage());
    }
  
    // Connection 
    try
    {
       mDB = "jdbc:mysql://localhost/bmi";
       conn = DriverManager.getConnection(mDB,"root","");
       stmtSQL = conn.createStatement();
    }
    catch (SQLException err)
    {
       System.out.println("Driver: " + err.getMessage()); 
    }
 }

 private void schliesseDB() 
 {
	try 
	{
	   stmtSQL.close();
	   conn.close();
	}
	catch (SQLException err)   
	{
       System.err.println(err);
    }
 }
 
 public void anfuegen(Person pNeuePerson)
{
  mSQL = "Insert into Person (gewicht, groesse, geschlecht, bmi, name, jahre) ";
  mSQL = mSQL + " Values("; 
  mSQL = mSQL + pNeuePerson.getGewicht() + ",";
  mSQL = mSQL + pNeuePerson.getGroesse() + ",";
  mSQL = mSQL + "'" + pNeuePerson.getGeschlecht() + "',";
  mSQL = mSQL + pNeuePerson.getBMI() + ",";
  mSQL = mSQL + "'" + pNeuePerson.getName() + "',";
  mSQL = mSQL + pNeuePerson.getJahre() + ");";
  
  oeffneDB();
  try 
  {
   System.out.println(mSQL);
   stmtSQL.executeUpdate(mSQL); 
   System.out.println("Daten erfolgreich angefügt!");

  }
  catch(Exception e)   
  {
   System.out.println("Anfügen fehlgeschlagen!");
  }
  schliesseDB(); 
 }

 public  Person sucheAlleDatensaetze(String pName)
 {
  mSQL = "SELECT * FROM Person WHERE name ='" + pName + "';";
  oeffneDB();
  try 
  {
     einePerson = new Person();
     ergebnisMenge = stmtSQL.executeQuery(mSQL);   
     ergebnisMenge.first();
     einePerson.setName(ergebnisMenge.getString("name"));  
     einePerson.setGewicht(ergebnisMenge.getDouble("gewicht"));
     einePerson.setGroesse(ergebnisMenge.getDouble("groesse"));
     einePerson.setJahre(ergebnisMenge.getInt("jahre"));
	 einePerson.setGeschlecht(ergebnisMenge.getString("geschlecht"));
     einePerson.berechneBMI();
  }
  catch(Exception e)
  { 
     einePerson=null;
  }
  //schliesseDB();
  return einePerson;
 }
 
 public Person naechsterDatensatz()
 {
  try
  {
     ergebnisMenge.next();
	 einePerson.setName(ergebnisMenge.getString("name")); 
	 einePerson.setGewicht(ergebnisMenge.getDouble("gewicht"));
	 einePerson.setGroesse(ergebnisMenge.getDouble("groesse"));
	 einePerson.setJahre(ergebnisMenge.getInt("jahre"));
	 einePerson.setGeschlecht(ergebnisMenge.getString("geschlecht"));
	 einePerson.berechneBMI();
  }
  catch (Exception ex)
  {
	einePerson=null;  
  }
  return einePerson;
 }

 public void aendereName(String pNameNeu, String pNameBisher)
 {
  mSQL = "Update Person set name = '" + pNameNeu + "' Where name = '" + pNameBisher + "';";
     oeffneDB();
	
   try 
   {
     System.out.println(mSQL);
     stmtSQL.executeUpdate(mSQL); 
   }
   catch(Exception e)   
   {
     System.out.println("Änderung fehlgeschlagen!");
   }
   schliesseDB();       
}

public void loesche(String pNameBisher)
 {
  mSQL = "Delete from Person Where name = '" + pNameBisher + "';";
     oeffneDB();
	
   try
   {
   System.out.println(mSQL);
    stmtSQL.executeUpdate(mSQL); 
   }
   catch(Exception e)   
   {
     System.out.println("Löschen fehlgeschlagen!");
   }
   schliesseDB();       
}

}
