XML mit Java auslesen (DB im Hinterkopf)

Ok, dann schaue ich mir erstmal die Frameworks an - wird so wahrscheinlich einfacher...
Ich lese also die Daten (mit Hilfe von FW) aus und dann übergebe ich die einzelnen Parameter den Beans? Oder greifen Beans auf die FW zu? Nee, kann nicht sein, oder? Denn so wie ich Euch verstanden habe, muss es danach auch möglich sein, die "Zeilen" mit DB-Werten zu futtern. Stimmt's?

Gruß,
aja
 
Solche Frameworks konfigurierst du meistens über eine XMl-Datei. Dann können diese Frameworks dir die Objecte zusammen bauen. Du musst dich darum nicht mehr kümmern.
Ich hab bei meinem Beispiel ja Toplink verwendet, das ist ein solcher Mapper für Datenbanken. wie du siehst brauche ich da meine Bean nicht mehr zu befüllen, sondern es wird mir direkt ein Object zurückgegeben.

Code:
public Employee findByPriKey(Long key) throws DaoException {

        ReadObjectQuery query = new ReadObjectQuery(Employee.class);

        query.setSelectionCriteria(new ExpressionBuilder().get("empno").equal(

                key));

        Employee emp = (Employee) clientSession.executeQuery(query);

        UnitOfWork uow = clientSession.acquireUnitOfWork();

        uow.registerObject(emp);

        uow.release();
        return emp;
    }

Code:
Employee emp = (Employee) clientSession.executeQuery(query);
Employee ist hier meine Bean. Wie du siehst befülle ich die Bean nicht, sondenr ich bekomme direkt eine Instance zurück.
Das machen solche Frameworks für dich. Wenn du nicht so ein Framework benutzt, musst du halt selbst ein Object anlegen und es befüllen und zurück geben.

MFG

zEriX
 
Ok, also ich habe gerade erfahren, dass ich keine zusätzlichen Frameworks benutzen soll :( Ich muss es also alles per Hand machen... Ich verstehe dein Beispiel, bin mir aber immernoch nicht ganz sicher wie ich es machen kann. Angenommen ich fange mit der Tabelle an, deren Code ich hier gepostet habe (Location). Dazu mache ich eine LocationBean, die vorgibt, dass eine Location aus Id, Namen, usw. besteht. Aber wo lese ich die .xml-Datei ein? Wenn ich es in der Dao-Implementierung mache, dann entsteht doch ein Misch-Masch aus den Werten aller möglichen Tabellen, oder? Muss ich etwa in jeder Bean auf die .xml-Datei zugreifen und der Bean sagen, dass sie nach einer Tabelle mit dem bestimmten Namen suchen soll und dann die Attributwerte zu den vorgegebenen Attributen der Tabelle auslesen?

Gruß,
aja
 
Du greifst in dem DAO auf die XML-Datei zu. Du musst natürlich für jede Bean auch ein eigenes DAO implementieren. So gibt es dann kein MischMasch, sondern jedes DAO ist für eine XML zuständig.

MFG

zEriX
 
Naja, es ist nur eine xml-Datei, in der aber mehrere Tabellen definiert sind. Soll dann die ganze Datei mit einem Dao eingelesen werden? Woher wissen dann die Beans, welche Tupeln zu welcher Bean gehören? Und noch was: liest das Dao die ganze Datei in den Speicher ein (ich soll DOM benutzen) oder nur die Werte/die Struktur? Lege ich in den Beans die Tabellennamen und -attribute fest oder werden die auch irgendwie eingelesen?

Gruß,
aja
 
Wenn du DOM benutzen sollst, musst du ja einen DOM-Baum aufbauen, also die Datei in den Speicher lesen. In einem solchen DOM-Baum kannst du wirklcih alles abfragen, was die XML-Datei betrifft. In den Methoden die das DAO-Interface vorgibt befüllst du dann die Beanobjecte.

Grob gesagt, angenommen du suchst eine Location anhand der ID. Also nutzt du die Methode des DAOs findByPrimaryKey(int id) (Die Methode muss nicht zwingend so heißen, sollte aber vorhanden sein). In der Methode läufst du durch die Unterelemente der Location-Tabelle in deinem DOM-Baum, und wenn du die Id gefunden hast. Legst du dir ein neues Object von deiner Bean an, befüllst dieses Object mit den Werten aus dem Baum und gibst das Object zurück.

MFG

zEriX
 
Danke, zerix.
Ich habe nun angefangen, die Beans zu konstruieren. Ist es echt so einfach:
Code:
public class LocationBean implements Serializable {

	private static final long UUID = 00000000-0000-0000-0000-000000000000;
	private int id = 0;
	private String name = null;
	private String description = null;
	
	public LocationBean(){
	}
	
	public LocationBean (int id, String name, String description){
		this.id = id;
		this.name = name;
		this.description = description;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
        ...... (weitere Getter/Setter, für UUID nur Getter)
?

Was das weitere Vorgehen betrifft... Den DOM-Baum kann ich erzeugen, aber...
In meiner Applikation wird das so, dass man die einzelnen ganzen Tabellen einlesen kann und dann den(die) Zeilenwert(e) ändern, und nicht die konkreten Attribute anspricht. Um bei dem Location-Beispiel zu bleiben:

könnte ich z.B. eine Methode getLocationTable() im DAO definieren? Wie könnte man sie dann implementieren? Müsste man in dem Baum nach einer Tabelle mit dem Namen "Location" suchen und die Werte der Unterknoten holen?

Wenn ich richtig liege, wie gibt man die Werte zu der Bean und die Bean zurück?
Würde es in etwa so ausschauen:
Code:
die Tabelle Location - weiß nicht wie - finden
...LocationBean location = new LocationBean();
in der Schleife die Unterknoten durchgehen
Man, ich weiß echt nicht weiter :( Wie kann ich mehrere Zeilen an die LocationBean anhängen? Wie gib ich die Bean befüllt zurück?

Du lachst dich bestimmt kaputt, zerix:rolleyes: Aber ich möchte es echt lernen und habe kein Plan. Vielen Dank für deine bisherigen Aufklärungen - sie helfen mir sehr weiter

Gruß,
aja
 
Kann ich auch irgendwie sicher stellen, dass manche Attribute in einer Tabelle nicht 2mal denselben Wert haben dürfen? (PKs) Und wie siehts mit Abhängigkeiten aus? (FKs)

Gruß,
aja
 

Neue Beiträge

Zurück