Hallo liebe Leute,
Ich kann mich erfolgreich mit einer Db verbinden die folgend aufgebaut ist:
Abteilungsleiter(leiter ID)---->(id)Angestellter(personID)---->(id)Personen.
mit anderen worten jeder Abteilungsleiter ist Angesteller und Person ...usw..aber nicht umgekehrt.
dafür habe ich folgende Methode, die bislang unterschied zwischen einer Person und Angestellten macht, allerdings noch nicht festellen kann ob der Angestellter auch Abteilungsleiter ist.
Die SQL-Abfragen sowie Spreicherung des Resultselts ist in der Klassen Person, Angesteller , Abteilung, die eine PersistenzInterface implementieren
Die Klasse Abteilung habe ich soweit geschrieben und habe die anmelden() so umgeändert
mit dem Ergebnis :
Ich wäre euch sehr dankbar für jeden Tipp oder Anregung.
Ich kann mich erfolgreich mit einer Db verbinden die folgend aufgebaut ist:
Abteilungsleiter(leiter ID)---->(id)Angestellter(personID)---->(id)Personen.
mit anderen worten jeder Abteilungsleiter ist Angesteller und Person ...usw..aber nicht umgekehrt.
dafür habe ich folgende Methode, die bislang unterschied zwischen einer Person und Angestellten macht, allerdings noch nicht festellen kann ob der Angestellter auch Abteilungsleiter ist.
Java:
private boolean anmelden(){
// teste Vollständigkeit der Eingabedaten
String message = "";
if (txtVorname.getText().trim().equals(""))
message = " Vorname";
if(txtNachname.getText().trim().equals(""))
message += " Nachname";
// keine Passwort-Prüfung, denn dies Feld kann auch leer sein
if(message.length() > 0){
statusleiste.setText("Fehlende Eingabe:" + message);
}
else {
this.getDbManager(); // DbManager sicherstellen
person = new Person(txtVorname.getText().trim(), txtNachname.getText().trim());
/* Wiederholungsaufgabe 4.3: */
dbManager.startTransaction();
angestellter = new Angestellter(person);
abteilung = new Abteilung(angestellter);
if(person.retrieveObject(dbManager)) {
if(angestellter.retrieveObject(dbManager)){
// Lesen des Kunden war erfolgreich
statusleiste.setText("Angestellter "
+ person.getVorname() + " " + person.getNachname() + "!");
this.setAnmeldungErfolgreich(true);
dbManager.endTransaction(true);
statusleiste.setText("ZUGANG VERWEIGERT:"
+ person.getVorname() + " " + person.getNachname() + " ist kein Abteilungsleiter!");
return true;
}else{
// Lesen des Kunden war erfolgreich
statusleiste.setText("Angestellter "
+ person.getVorname() + " " + person.getNachname() + "!");
this.setAnmeldungErfolgreich(true);
dbManager.endTransaction(true);
statusleiste.setText(" :"
+ person.getVorname() + " " + person.getNachname() + " ist kein Angestellter");
}
return true;
}else
statusleiste.setText("Person"
+ person.getVorname() + " " + person.getNachname() + " existiert nicht in der DB");
dbManager.endTransaction(true);
/* "endTransaction(f a l s e)"-Aufruf nicht erforderlich, da keine Änderungen
* in der Datenbank erfolgen und lediglich das serielle (isolierte) Lesen
* sichergestellt werden muss. */
return true;
}
return false;
}
Die SQL-Abfragen sowie Spreicherung des Resultselts ist in der Klassen Person, Angesteller , Abteilung, die eine PersistenzInterface implementieren
Java:
import java.sql.ResultSet;
import java.sql.SQLException;
public class Angestellter implements PersistenzInterface {
/* ****** PI-Properties ****** */
private boolean persistent;
public boolean isPersistent() { return persistent; }
public void setPersistent(boolean newValue) { this.persistent = newValue; }
private boolean modified;
public boolean isModified() { return modified; }
public void setModified(boolean newValue) { this.modified = newValue; }
/* Konstruktoren */
public Angestellter(int id) {
this.id = id;
}
public Angestellter(Person person) {
this.person = person;
}
/* ausgewählte Properties Angestelltendaten, ausreichend für Kunden-Client */
private int id; // auch von PI gefordert
public int getId() { return id; }
public void setId(int id) { this.id = id; this.setModified(true); }
private Abteilung abteilung;
public Abteilung getAbteilung() { return abteilung; }
public void setAbteilung(Abteilung abteilung) { this.abteilung = abteilung; this.setModified(true); }
private String geschlecht;
public String getGeschlecht() { return geschlecht; }
public void setGeschlecht(String geschlecht) { this.geschlecht = geschlecht; this.setModified(true); }
private Person person;
public Person getPerson() { return person; }
public void setPerson(Person person) { this.person = person; this.setModified(true); }
/* weitere Felder */
private String message;
public String getMessage() { return message; }
/* ****** Datenbankoperationen ****** */
public boolean retrieveObject(DbManager dbManager) {
if(this.isPersistent()) {
message = "ausDbLesen: Der Angestellte wurde schon aus der DB gelesen";
return true;
} else {
if(!dbManager.executeRetrieve(this)) { // alternative Suche nach id oder Name in
message = "ausDbLesen: Kein Angestellter in der Datenbank";
return false;
} else {
return true;
}
}
}
public boolean deleteObject(DbManager dbManager) {
// TODO Auto-generated method stub
return false;
}
public boolean updateObject(DbManager dbManager) {
// TODO Auto-generated method stub
return false;
}
public boolean insertObject(DbManager dbManager) {
// TODO Auto-generated method stub
return false;
}
/* ****** SQL-Anweisungen erstellen ****** */
public String getDeleteSQL() {
// TODO Auto-generated method stub
return null;
}
public String getInsertSQL() {
// TODO Auto-generated method stub
return null;
}
public String getRetrieveSQL() {
String queryString = null;
if(this.getId() > 0) { // noch nicht gelesen, aber schon in DB (id ist dann > 0)
queryString = "SELECT id, abtID, geschlecht, personID FROM angestellte WHERE id=" + this.getId();
} else { // Objekt ist transient
if(this.getPerson().getId() > 0)
queryString = "SELECT id, abtID, geschlecht, personID FROM angestellte WHERE personID=" + this.getPerson().getId();
else
message = "Angestellter.ausDbLesen: PersonID muss gesetzt sein (ist aber 0)";
}
return queryString;
}
public String getUpdateSQL() {
// TODO Auto-generated method stub
return null;
}
public boolean loadObjProps(ResultSet rs) {
try {
if(rs != null && rs.next()) {
this.setId(rs.getInt(1));
int newID = rs.getInt(2);
if(abteilung == null) //für temporäre Objekte
abteilung = new Abteilung(rs.getInt(2));
if(newID != this.getAbteilung().getId()) // sonst würde das eingebettete Person-Objekt als "verändert" markiert!
this.getAbteilung().setId(newID);
this.setGeschlecht(rs.getString(3));
newID = rs.getInt(4);
if(person == null) //für temporäre Objekte
person = new Person(newID);
if(newID != this.getPerson().getId()) // sonst würde das eingebettete Person-Objekt als "verändert" markiert!
this.getPerson().setId(newID);
return true;
}
} catch (SQLException sqle) {
System.out.println("Angestellter.ladeObjekt - " + sqle.toString());
}
return false;
}
/* ******* sonstige Hilfsmethoden ****** */
@Override
public boolean equals(Object object){
// TODO implement
return false;
}
@Override
public String toString() {
return "Angestellter id=" + id + " " + this.getPerson() + ", Abteilung " + abteilung;//.getId();//this.getAbteilung().getName();
}
@Override
public String getPufferKey() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setPufferKey(String pufferKey) {
// TODO Auto-generated method stub
}
}
Java:
import java.sql.ResultSet;
/* Das Interface muss auch in dieses Projekt aufgenommen werden,
* da es den DbManager dieser Projektversion verwendet. Daher ist kein
* Import aus "lektion4" möglich. */
public interface PersistenzInterface extends Cloneable {
/* Persistenzeigenschaften */
boolean isPersistent();
void setPersistent( boolean newValue );
boolean isModified();
void setModified( boolean newValue );
/* id-Eigenschaft für ale PI-Objekte ab Lektion 4 */
void setId(int id);
int getId();
/* Fügt das aktuelle Objekt in die Datenbank ein (SQL-INSERT). */
boolean insertObject(DbManager dbManager);
/* Liest ein Objekt aus der Datenbank (SQL-SELECT).
* In Lektion 5 erhält die Methode eine andere Rückgabe, um alternativ das
* Original oder das Pufferobjekt durchreichen zu können. */
boolean retrieveObject(DbManager dbManager);
/* Ändert den Objektzustand in der Datenbank (SQL-UPDATE). */
boolean updateObject(DbManager dbManager);
/* Löscht das aktuelle Objekt aus der Datenbank (SQL-DELETE). */
boolean deleteObject(DbManager dbManager);
/* SQL-String- und Verwaltungsmethoden - ab Lektion 4 */
String getInsertSQL();
String getRetrieveSQL();
String getUpdateSQL();
String getDeleteSQL();
/* Läd die Properties (Eigenschaften) eines perssistenzfähigen Objekts aus
* dem übergebenen ResaultSet-Objekt - Ergebnis einer Datenbankabfrage.
* Der Methodenname kürzt "loadObjectProperties" ab. */
boolean loadObjProps(ResultSet rs);
/* Ergänzung in Lektion 5:
* Das mapping dient der S u c h e ("find" - bzw. "retrieve" aus CRUD)
* im Puffer - also muss ein Wert erzeugt werden, mit dem typischerweise
* gesucht wird. Die Schlüsseldefinition sollte auf die angebotenen
* Konstruktoren (bzw. deren Parameter) abgestimmt werden. */
String getPufferKey();
void setPufferKey(String pufferKey);
/****WAS SOLL DAS ***/
//PersistenzInterface clone() throws CloneNotSupportedException;
String getMessage();
}
Die Klasse Abteilung habe ich soweit geschrieben und habe die anmelden() so umgeändert
mit dem Ergebnis :
DbManager.executeSelect - java.sql.SQLException: Can not issue NULL query.
Java:
private boolean anmelden(){
// teste Vollständigkeit der Eingabedaten
String message = "";
if (txtVorname.getText().trim().equals(""))
message = " Vorname";
if(txtNachname.getText().trim().equals(""))
message += " Nachname";
// keine Passwort-Prüfung, denn dies Feld kann auch leer sein
if(message.length() > 0){
statusleiste.setText("Fehlende Eingabe:" + message);
}
else {
this.getDbManager(); // DbManager sicherstellen
person = new Person(txtVorname.getText().trim(), txtNachname.getText().trim());
/* Wiederholungsaufgabe 4.3: */
dbManager.startTransaction();
angestellter = new Angestellter(person);
abteilung = new Abteilung(angestellter);
if(angestellter.retrieveObject(dbManager)){
if(abteilung.retrieveObject(dbManager)){
statusleiste.setText("Angestellter "
+ person.getVorname() + " " + person.getNachname() + "!");
this.setAnmeldungErfolgreich(true);
dbManager.endTransaction(true);
System.out.println("Hopla");
return true;
}
else{
// Lesen des Kunden war erfolgreich
statusleiste.setText("Angestellter "
+ person.getVorname() + " " + person.getNachname() + "!");
this.setAnmeldungErfolgreich(true);
dbManager.endTransaction(true);
statusleiste.setText(" :"
+ person.getVorname() + " " + person.getNachname() + " ist kein Abteildjhf");
}
return true;
}
else
if(person.retrieveObject(dbManager)) {
if(angestellter.retrieveObject(dbManager)){
// Lesen des Kunden war erfolgreich
statusleiste.setText("Angestellter "
+ person.getVorname() + " " + person.getNachname() + "!");
this.setAnmeldungErfolgreich(true);
dbManager.endTransaction(true);
statusleiste.setText("ZUGANG VERWEIGERT:"
+ person.getVorname() + " " + person.getNachname() + " ist kein Abteilungsleiter!");
return true;
}else{
// Lesen des Kunden war erfolgreich
statusleiste.setText("Angestellter "
+ person.getVorname() + " " + person.getNachname() + "!");
this.setAnmeldungErfolgreich(true);
dbManager.endTransaction(true);
statusleiste.setText(" :"
+ person.getVorname() + " " + person.getNachname() + " ist kein Angestellter");
}
return true;
}else
statusleiste.setText("Person"
+ person.getVorname() + " " + person.getNachname() + " existiert nicht in der DB");
dbManager.endTransaction(true);
/* "endTransaction(f a l s e)"-Aufruf nicht erforderlich, da keine Änderungen
* in der Datenbank erfolgen und lediglich das serielle (isolierte) Lesen
* sichergestellt werden muss. */
return true;
}
return false;
}
Ich wäre euch sehr dankbar für jeden Tipp oder Anregung.
Zuletzt bearbeitet von einem Moderator: