ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
473
473
EMPFEHLEN
-
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.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
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
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
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 } }
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
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.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
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.Geändert von sos (10.12.11 um 11:36 Uhr)
-
10.12.11 12:02 #2
Man man man, den Code muss ja erst umformatieren...
Aber egal. Wenn ich das richtig verstanden habe, dann willst du herausfinden, ob ein Angestellter auch ein Abteilungsleiter ist. In der Klasse Angestellter lädst du aber nur den Kram für den Angestellten, jedenfalls habe ich sonst nix gefunden, auch nicht in den SQLs. Wo wird denn die Information zum Abteilungsleiter hinterlegt? Gibt es dafür eine weitere Tabelle oder wie oder was.Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Danke
Abteilung ist eine Weiter Tabelle ja, hier ist die Klasse Abteilung : Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
import java.sql.ResultSet; import java.sql.SQLException; public class Abteilung 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 Abteilung(int id) { this.id = id; } private Angestellter angestellter; public Abteilung(Angestellter angestellter) { this.angestellter = angestellter; } /* Properties zu Abteilungsdaten */ private int id; public int getId() { return id; } public void setId(int id) { this.id = id; this.setModified(true); } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } private String message; public String getMessage() { return message;} private String geschlecht; public String getGeschlecht() { return geschlecht; } public void setGeschlecht(String geschlecht) { this.geschlecht = geschlecht; this.setModified(true); } private Person person; public Angestellter getAngestellter() { return angestellter; } public void setAngestellter(Angestellter angestellter) { this.angestellter = angestellter; this.setModified(true);} /* ****** 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, name, leiterID FROM abteilung WHERE id=" + this.getId(); } else { // Objekt ist transient if(this.getAngestellter().getId()> 0) queryString = "Select abteilungen.id ,abteilungen.name, abteilungen.leiterID , vorname, " + "nachname from personen left JOIN (Select personID,id from angestellte) A " + "on personen.id=A.personID Left join abteilungen on A.id=abteilungen.leiterID " + "where A.id in (SELECT leiterID FROM abteilungen) =" + this.getAngestellter().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()) { id = rs.getInt(1); int newID = rs.getInt(2); this.setGeschlecht(rs.getString(3)); newID = rs.getInt(4); if(person == null) //für temporäre Objekte person = new Person(newID); if(newID != this.getAngestellter().getId()) // sonst würde das eingebettete Person-Objekt als "verändert" markiert! this.getAngestellter().setId(newID); return true; } } catch (SQLException sqle) { System.out.println("Kunde.loadObjProps - " + sqle.toString()); } return false; } /* ******* sonstige Hilfsmethoden ****** */ /* "equals" wird überschrieben, um zwei Abteilungsobjeke auf Gleichheit * zu testen. */ @Override public boolean equals(Object object){ // TODO implement return false; } @Override public String toString() { return new Integer(id).toString(); } @Override public String getPufferKey() { // TODO Auto-generated method stub return null; } @Override public void setPufferKey(String pufferKey) { // TODO Auto-generated method stub } }
Geändert von sheel (10.12.11 um 14:17 Uhr) Grund: Codetags
-
10.12.11 13:40 #4
Ähm... Du hast die Tags vertauscht. Das erste Tag ist ohne Slash (/), das muss in das zweite Tag, um das Ende zu kennzeichnen.
EDIT:
Bei deinem SQL sieht was komisch aus:
Das müsste eigentlich so aussehen:Code java:1
"where A.id in (SELECT leiterID FROM abteilungen) =" + this.getAngestellter().getId();
Code java:1
"where A.id = " + this.getAngestellter().getId();
Geändert von Akeshihiro (11.12.11 um 14:32 Uhr)
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
Ähnliche Themen
-
Java Server Pages Status 500 Unable to find a javac compiler
Von dananudel im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 11Letzter Beitrag: 17.05.10, 16:11 -
Ajax Java Upload Status
Von Sziebeck im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 26.02.10, 14:04 -
MySQL Status
Von AZUBI09 im Forum PHPAntworten: 2Letzter Beitrag: 25.09.09, 12:28 -
mit Zeiten rechnen - Ermittlung der Arbeitszeit aus MySQL-Tabelle
Von dwex im Forum PHPAntworten: 20Letzter Beitrag: 08.05.05, 17:41 -
Java Server Pages Status 500 Unable to find a javac compiler
Von dananudel im Forum JavaAntworten: 0Letzter Beitrag: 17.02.05, 15:50





Zitieren
Login





