# Blutiger Anfänger braucht Hilfe - Projekt Zeiterfassung für Mitarbeiter



## valinut (28. August 2013)

Hallo liebe Community,

ich bin neu hier, das ist eine sehr schöne und nützliche Seite. Nun zu meiner Problemm: kann mir jemand helfen bei der Erstellung eines Programmes, mit dem Anwesenheitszeiten im Büro eingetragen werden können? Ich hoffe dass mir jemand helfen kann. 

Folgende Angaben sind vorgegeben:

Es sollen zwei Klassen sein : Arbeitszeit und Mitarbeiter

1. Arbeitszeit:
Eigenschaften: arbeitszeitid (int),mitarbeiter_id(int, Fremdschlüssel auf Mitarbeiter), startzeit (Date),endzeit (Date), mittagDauer (Double), erledigteAufgaben (String)
2. Mitarbeiter
Eigenschaften: mitarbeiterid (int), vorname(String), nachname (String)

Dazu die entsprechenden Tabellen in MySQL anlegen (MITARBEITER,ARBEITSZEIT)

Dann: 1. Schritt: Konsolenprogramm, das einen Mitarbeiter anlegen kann, Arbeitszeiten zu einem MA anlegen kann
2. Schritt: Java GUI, mit dem MA angelegt werden kann, Zeiten eingegeben, gelöscht, bearbeitet werden kann etc.
3. Web Formular, analog zu 2.

1. Klasse Arbeitszeit:


```
package de.zeiterfassung;

import java.util.Date;


public class Arbeitszeit {
	
	private int arbeitszeitid;
	private int mitarbeiter_id;
	private Date startzeit;
	private Date endzeit;
	private double mittagDauer;
	private String erledigteAufgaben;
	
	public int getArbeitszeitid() {
		return arbeitszeitid;
	}
	public void setArbeitszeitid(int arbeitszeitid) {
		this.arbeitszeitid = arbeitszeitid;
	}
	public int getMitarbeiter_id() {
		return mitarbeiter_id;
	}
	public void setMitarbeiter_id(int mitarbeiter_id) {
		this.mitarbeiter_id = mitarbeiter_id;
	}
	public Date getStartzeit() {
		return startzeit;
	}
	public void setStartzeit(Date startzeit) {
		this.startzeit = startzeit;
	}
	public Date getEndzeit() {
		return endzeit;
	}
	public void setEndzeit(Date endzeit) {
		this.endzeit = endzeit;
	}
	public double getMittagDauer() {
		return mittagDauer;
	}
	public void setMittagDauer(double mittagDauer) {
		this.mittagDauer = mittagDauer;
	}
	public String getErledigteAufgaben() {
		return erledigteAufgaben;
	}
	public void setErledigteAufgaben(String erledigteAufgaben) {
		this.erledigteAufgaben = erledigteAufgaben;
	}
	
	

}
```


2. Klasse Mitarbeiter


```
package de.zeiterfassung;

public class Mitarbeiter {
	
	public Mitarbeiter(){
	}
	
	//die Attribute einer Mitarbeiter im Betrieb.
	public Mitarbeiter(String _vorname, String _nachname){
		this.vorname = _vorname;
		this.nachname = _nachname;
	}
	//Eigenschaften;
	private int mitarbeiterid;
	private String vorname;
	private String nachname;
	public int getMitarbeiterid() {
		return mitarbeiterid;
	}
	public void setMitarbeiterid(int mitarbeiterid) {
		this.mitarbeiterid = mitarbeiterid;
	}
	public String getVorname() {
		return vorname;
	}
	public void setVorname(String vorname) {
		this.vorname = vorname;
	}
	public String getNachname() {
		return nachname;
	}
	public void setNachname(String nachname) {
		this.nachname = nachname;
	}

}
```

3. Ich habe eine 3.Klasse angelegt "ZeiterfassungProg"


```
package de.zeiterfassung;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
	
public class ZeiterfassungProgramm {

	/**
	 * @param args
	 * @throws SQLException 
	 */
	
	public static void main(String[] args) throws SQLException {

		//Testmitarbeiter wird angelegt:
		Mitarbeiter mitarbeiter1 = new Mitarbeiter("Vorname", "Name");

		ZeiterfassungProgramm zeiterfassungProgramm = new ZeiterfassungProgramm();
		
		Mitarbeiter mitarbeiter2 = zeiterfassungProgramm.mitarbeiterAuslesen(1);
		
		System.out.println(mitarbeiter2.getVorname() + " " + mitarbeiter2.getNachname());
		
		
		
		//zeiterfassungProgramm.mitarbeiterAnlegen(mitarbeiter1);
		
		//Mitarbeiter aus DB holen und anzeigen (SELECT)
		
		//Mitarbeiter löschen
		
		//Mitarber ändern
		
	}
	
public Mitarbeiter mitarbeiterAuslesen(int mitarbeiterId){
		
	Mitarbeiter mitarbeiter = new Mitarbeiter();
	
		try{
			
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			
			Connection con = DriverManager.getConnection(
					"jdbc:mysql://localhost/zeiterfassung","root", "pw");
			
			con.setReadOnly(true);
			
			Statement stmt = con.createStatement();
			
			ResultSet rs = stmt.executeQuery("Select * from mitarbeiter where Mitarbeiterid = " + mitarbeiterId);
			
			while (rs.next()){
				//System.out.println(rs.getInt(1) + " " + rs.getString(2));
				mitarbeiter.setMitarbeiterid(rs.getInt(1));
				mitarbeiter.setVorname(rs.getString(2));
				mitarbeiter.setNachname(rs.getString(3));
			}
			
			
			rs.close();
			stmt.close();
			con.close();
			
			
		}catch(Exception e){
			System.out.println("***** FEHLERMELDUNG ***** -> "+e);
		}
		return mitarbeiter;
		
	}
	
	private void mitarbeiterAnlegen (Mitarbeiter mitarbeiter) throws SQLException{
		System.out.println(mitarbeiter.getMitarbeiterid());
		

	      // PreparedStatements can use variables and are more efficient
		PreparedStatement  preparedStatement = getDBConnection().prepareStatement("insert into zeiterfassung.mitarbeiter (vorname,nachname) values ( ?, ?)");
	      // "myuser, webpage, datum, summary, COMMENTS from FEEDBACK.COMMENTS");
	      // Parameters start with 1
	   //   preparedStatement.setString(1, UUID.randomUUID().toString());
	      preparedStatement.setString(1, mitarbeiter.getVorname());
	      preparedStatement.setString(2, mitarbeiter.getNachname());
	      preparedStatement.executeUpdate();
		
	}
	
	private Connection getDBConnection(){
	      Connection cn = null;
		
	      try {
			Class.forName( "com.mysql.jdbc.Driver" );
			try {
				cn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/zeiterfassung", "root", "pw" );
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	      
	      
	      return cn;
	}
}
```

4. Die Tabellen in die MySQL DB habe ich schon angelegt, getestet, verbindung aufgebaut... funktioniert.


nun... irgendwie komme ich nicht weiter... Ich hoffe dass mir jemand helfen kann.

Vielen Dank im Voraus.


----------



## hendl (28. August 2013)

Was funktioniert denn überhaupt nicht?
Und wenn du deinen Code in [code=java] Code  [/code] Tags einfügst kann man ihn wesentlich besser lesen.

Edit
Was mir gleich mal auffällt ist, dass du Connection zur DB beim Mitarbeiter anlegen nie schließt.

Lg hendl


----------



## valinut (28. August 2013)

Danke für deine Antwort... wie muss ich die beide Klassen (Arbeitszeit und Mitarbeiter) ergänzen, damit alles wie aufgefordert funktioniert?


```
//zeiterfassungProgramm.mitarbeiterAnlegen(mitarbeiter1);
        
        //Mitarbeiter aus DB holen und anzeigen (SELECT)
        
        //Mitarbeiter löschen
        
        //Mitarber ändern
```

z. b. Mitarbeiter Anlegen soll automatisch nach der Reihenfolge...


----------



## hendl (28. August 2013)

Hi jetzt sollte schon mehr funktionieren 


```
package mitarbeiter;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ZeiterfassungProgramm {

	/**
	 * @param args
	 * @throws SQLException
	 */

	public static void main(String[] args) {

		// Testmitarbeiter wird angelegt:
		Mitarbeiter mitarbeiter1 = new Mitarbeiter("Vorname", "Name");
		Mitarbeiter mitarbeiter2 = null;
		ZeiterfassungProgramm zeiterfassungProgramm = new ZeiterfassungProgramm();

		try {
			zeiterfassungProgramm.mitarbeiterAnlegen(mitarbeiter1);
			mitarbeiter2 = zeiterfassungProgramm.mitarbeiterAuslesen(1);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.err.println("Kein Zugriff auf DB möglich");
		}
		System.out.println(mitarbeiter2.getVorname() + " "
				+ mitarbeiter2.getNachname());

		// Mitarbeiter löschen

		// Mitarber ändern

	}

	public Mitarbeiter mitarbeiterAuslesen(int mitarbeiterId)
			throws SQLException {

		Mitarbeiter mitarbeiter = new Mitarbeiter();

		Connection con = getDBConnection();

		con.setReadOnly(true);

		ResultSet rs = con.createStatement().executeQuery(
				"Select * from mitarbeiter where Mitarbeiterid = "
						+ mitarbeiterId);

		while (rs.next()) {
			// System.out.println(rs.getInt(1) + " " + rs.getString(2));
			mitarbeiter.setMitarbeiterid(rs.getInt(1));
			mitarbeiter.setVorname(rs.getString(2));
			mitarbeiter.setNachname(rs.getString(3));
		}

		rs.close();
		con.close();

		return mitarbeiter;

	}

	private void mitarbeiterAnlegen(Mitarbeiter mitarbeiter)
			throws SQLException {

		Connection con = getDBConnection();
		if (con != null) {
			PreparedStatement preparedStatement = con
					.prepareStatement("Select mitarbeiterid from mitarbeiter where vorname LIKE ? and nachname LIKE ?");
			preparedStatement.setString(1, mitarbeiter.getVorname());
			preparedStatement.setString(2, mitarbeiter.getNachname());
			if(!preparedStatement.executeQuery().next()){  // Falls Mitarbeiter schon in Table vorhanden nicht nochmal eintragen
			int mid = 0;
			ResultSet rs = con.createStatement().executeQuery(
					"select max(\"mitarbeiterid\") from mitarbeiter");
			if (rs.next()) {
				mid = rs.getInt(1);
			}
			mid++;
			mitarbeiter.setMitarbeiterid(mid);
			preparedStatement = con
					.prepareStatement("insert into mitarbeiter (mitarbeiterid,vorname,nachname) values ( ?,?, ?)");
			preparedStatement.setInt(1, mitarbeiter.getMitarbeiterid());
			preparedStatement.setString(2, mitarbeiter.getVorname());
			preparedStatement.setString(3, mitarbeiter.getNachname());
			preparedStatement.executeUpdate();
			}
			con.close();
			System.out.println("Mitarbeiterid: " + mitarbeiter.getMitarbeiterid());
		} else {
			System.err.println("Keine Verbindung zur DB");
		}
	}

	private Connection getDBConnection() throws SQLException {
		Connection cn = null;

		try {
			Class.forName("org.postgresql.Driver");
			cn = DriverManager.getConnection(
					"jdbc:postgresql://localhost/zeiterfassung", "postgres",
					"cisco");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return cn;
	}
}


package mitarbeiter;

public class Mitarbeiter {

	public Mitarbeiter() {
	}

	// die Attribute einer Mitarbeiter im Betrieb.
	public Mitarbeiter(String _vorname, String _nachname) {
		this.vorname = _vorname;
		this.nachname = _nachname;
	}

	// Eigenschaften;
	private int mitarbeiterid;
	private String vorname;
	private String nachname;

	public int getMitarbeiterid() {
		return mitarbeiterid;
	}

	public void setMitarbeiterid(int mitarbeiterid) {
		this.mitarbeiterid = mitarbeiterid;
	}

	public String getVorname() {
		return vorname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}

	public String getNachname() {
		return nachname;
	}

	public void setNachname(String nachname) {
		this.nachname = nachname;
	}

}


package mitarbeiter;

import java.util.Date;

public class Arbeitszeit {

	private int arbeitszeitid;
	private int mitarbeiter_id;
	private Date startzeit;
	private Date endzeit;
	private double mittagDauer;
	private String erledigteAufgaben;

	public int getArbeitszeitid() {
		return arbeitszeitid;
	}

	public void setArbeitszeitid(int arbeitszeitid) {
		this.arbeitszeitid = arbeitszeitid;
	}

	public int getMitarbeiter_id() {
		return mitarbeiter_id;
	}

	public void setMitarbeiter_id(int mitarbeiter_id) {
		this.mitarbeiter_id = mitarbeiter_id;
	}

	public Date getStartzeit() {
		return startzeit;
	}

	public void setStartzeit(Date startzeit) {
		this.startzeit = startzeit;
	}

	public Date getEndzeit() {
		return endzeit;
	}

	public void setEndzeit(Date endzeit) {
		this.endzeit = endzeit;
	}

	public double getMittagDauer() {
		return mittagDauer;
	}

	public void setMittagDauer(double mittagDauer) {
		this.mittagDauer = mittagDauer;
	}

	public String getErledigteAufgaben() {
		return erledigteAufgaben;
	}

	public void setErledigteAufgaben(String erledigteAufgaben) {
		this.erledigteAufgaben = erledigteAufgaben;
	}

}
```
Das löschen funtkioniert einfach per sql delete Befehl und ändern per update.
Falls du noch Hilfe brauchst einfach melden 
Lg hendl


----------



## valinut (29. August 2013)

Es funktioniert aber nicht... folgende Fehlermeldungen sind gekommen:


```
java.sql.SQLException: Invalid value for getInt() - 'mitarbeiterid'
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
	at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2826)
	at mitarbeiter.ZeiterfassungProgramm.mitarbeiterAnlegen(ZeiterfassungProgramm.java:81)
	at mitarbeiter.ZeiterfassungProgramm.main(ZeiterfassungProgramm.java:24)
Kein Zugriff auf DB möglich
Exception in thread "main" java.lang.NullPointerException
	at mitarbeiter.ZeiterfassungProgramm.main(ZeiterfassungProgramm.java:31)
```


----------



## hendl (29. August 2013)

Hmm vill gehts jetzt besser, arbeite sonst immer mit postgreSQL aber sollte jetzt unter mysql auch gehen.


```
package mitarbeiter;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ZeiterfassungProgramm {

	/**
	 * @param args
	 * @throws SQLException
	 */

	public static void main(String[] args) {

		// Testmitarbeiter wird angelegt:
		Mitarbeiter mitarbeiter1 = new Mitarbeiter("Vorname", "Name");
		Mitarbeiter mitarbeiter2 = null;
		ZeiterfassungProgramm zeiterfassungProgramm = new ZeiterfassungProgramm();

		try {
			zeiterfassungProgramm.mitarbeiterAnlegen(mitarbeiter1);
			mitarbeiter2 = zeiterfassungProgramm.mitarbeiterAuslesen(1);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.err.println("Kein Zugriff auf DB möglich");
		}
		System.out.println(mitarbeiter2.getVorname() + " "
				+ mitarbeiter2.getNachname());

		// Mitarbeiter löschen

		// Mitarber ändern

	}

	public Mitarbeiter mitarbeiterAuslesen(int mitarbeiterId)
			throws SQLException {

		Mitarbeiter mitarbeiter = new Mitarbeiter();

		Connection con = getDBConnection();

		con.setReadOnly(true);

		ResultSet rs = con.createStatement().executeQuery(
				"Select * from mitarbeiter where Mitarbeiterid = "
						+ mitarbeiterId);

		while (rs.next()) {
			// System.out.println(rs.getInt(1) + " " + rs.getString(2));
			mitarbeiter.setMitarbeiterid(rs.getInt(1));
			mitarbeiter.setVorname(rs.getString(2));
			mitarbeiter.setNachname(rs.getString(3));
		}

		rs.close();
		con.close();

		return mitarbeiter;

	}

	private void mitarbeiterAnlegen(Mitarbeiter mitarbeiter)
			throws SQLException {

		Connection con = getDBConnection();
		if (con != null) {
			int mid = 0;
			PreparedStatement preparedStatement = con
					.prepareStatement("Select mitarbeiterid from mitarbeiter where vorname LIKE ? and nachname LIKE ?");
			preparedStatement.setString(1, mitarbeiter.getVorname());
			preparedStatement.setString(2, mitarbeiter.getNachname());
			ResultSet rs = preparedStatement.executeQuery();
			if (!rs.next()) { // Falls Mitarbeiter schon in Table vorhanden
								// nicht nochmal eintragen
				mid = 0;
				rs = con.createStatement().executeQuery(
						"select max(\"mitarbeiterid\") from mitarbeiter");
				if (rs.next()) {
					rs.first();
					mid = rs.getInt(1);
					mid++;
				}
				preparedStatement = con
						.prepareStatement("insert into mitarbeiter (mitarbeiterid,vorname,nachname) values ( ?,?, ?)");
				preparedStatement.setInt(1, mitarbeiter.getMitarbeiterid());
				preparedStatement.setString(2, mitarbeiter.getVorname());
				preparedStatement.setString(3, mitarbeiter.getNachname());
				preparedStatement.executeUpdate();
			} else {
				mid = rs.getInt("mitarbeiterid");
				mitarbeiter.setMitarbeiterid(mid);

			}
			con.close();
			System.out.println("Mitarbeiterid: "
					+ mitarbeiter.getMitarbeiterid());
		} else {
			System.err.println("Keine Verbindung zur DB");
		}
	}

	private Connection getDBConnection() throws SQLException {
		Connection cn = null;

		try {
			Class.forName("org.postgresql.Driver");
			cn = DriverManager.getConnection(
					"jdbc:postgresql://localhost/zeiterfassung", "postgres",
					"cisco");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return cn;
	}
}
```

Lg hendl


----------

