# SQL Daten von Webservice an Client übergeben



## hausttom (8. Jun 2012)

Hallo,

ich habe vor kurzem angefangen mich mit Java zu beschäftigen. Ich will einen Webservice schreiben, der Daten von meiner MySQL-Datenbank an meinen lokalen Client weiterleitet. Ich habe soweit auch den Webservice implementiert und der Zugriff auf die Datenbank klappt auch einwandfrei. Einen lokalen Client zu implementieren sollte ich auch hinbekommen.

Meine Frage wäre jetzt, mit welchem Datentyp ich die Daten aus der Datenbank am besten an den Client übergeben kann. Ich benutze zur Programmierung Eclipse und die Java API JAX-WS. Meine Java Version ist Java 6. Die Daten aus der Datenbank hole ich mir mit einem ResultSet raus. Es werden mehrere Spalten und viele Datensätze bei Anfrage abgefragt.

Bei der Erstellung des Webservice habe ich mich im großen und ganzen an den Aufbau von diesem Tutorial gehalten: Create stand-alone web services applications with Eclipse and Java SE 6, Part 1: The web service server application

Mir wäre es am liebsten, wenn die Daten in einer Art ResultSet zurückgegeben werden können aber so etwas wie ein 2 dimensionales Array waren auch ganz ok. Bei dem Versuch das ganze mit einem zweidimensionalen Array zurückzugeben, gab es immer Probleme und das Script, mit dem ich den Client erzeuge, macht daraus immer eine List. Ich habe auch schon gehört, dass man das ganze eventuell über einen eigenen Datentyp machen kann aber ich habe keine Ahnung wie man so etwas implementiert. Vielleicht könnte man das ResultSet auch in XML umwandeln und dann im Client wieder zurück.

Ich hoffe ihr könnt mir bei diesem Problem helfen.


----------



## cljk (10. Jun 2012)

ResultSet wird nicht möglich sein, da das ein Objekt ist, dass sich auf den Datenbanklink bezieht - erstell dir eine Klasse, die das Ergebnis mappt (enthält die Felder deines Ergebnisses) und programmier eine Schleife, die das Resultset in eine Liste dieser Objekte umwandelt und die Liste ist dein Rückgabetyp.

Anders wird das nicht vernünftig gehen.


----------



## hausttom (10. Jun 2012)

Danke erstmal für deinen Tipp. Da ich ein Neuling in Java bin, hab ich jetzt noch nicht so die Ahnung von sowas? Könntest du mir eventuell kurz erklären, wie ich sowas angehen soll? Macht man sowas dann mit einer Inner-Class und mit meinem Client greife ich dann auf diese zu? 

Ich schreibe dann in meiner Webservice-Klasse ca. 10 Methoden, mit jeweils anderen SQL-Anweisungen, also ich habe dann immer verschiedene SELECT Parameter. Könnte man dann irgendwie die ResultSet-Metadaten mit benutzen?


----------



## cljk (10. Jun 2012)

hausttom hat gesagt.:


> Danke erstmal für deinen Tipp. Da ich ein Neuling in Java bin, hab ich jetzt noch nicht so die Ahnung von sowas? Könntest du mir eventuell kurz erklären, wie ich sowas angehen soll? Macht man sowas dann mit einer Inner-Class und mit meinem Client greife ich dann auf diese zu?


Also ich will da jetzt keinen kompletten Sourcecode bauen (ich kenn ja nichtmal deine Queries) - aber letztlich baust du dir ein paar Klassen, die deinem ResultSet entsprechen - ob als private Klassen oder eigenständig... ist wohl egal.

Die Schleife sieht dann irgendwie so aus...


```
ResultSet rs;
List<MeinObjekt> result = new LinkedList<MeinObjekt>();

... da fehlt was

while (rs.next()) {
 // mapping
 MeinObjekt o = new MeinObjekt();
 o.setId = rs.getInt(1);
 o.setName = rs.getString(2);
 ...
 result.add(o);
}
return result;
```
Wie du das ausgestalten musst, kann ich nicht sagen - das bekommst schon raus.



hausttom hat gesagt.:


> Ich schreibe dann in meiner Webservice-Klasse ca. 10 Methoden, mit jeweils anderen SQL-Anweisungen, also ich habe dann immer verschiedene SELECT Parameter. Könnte man dann irgendwie die ResultSet-Metadaten mit benutzen?


Nope, wüsste nicht wie das gehen soll. In einem Webservice können (meines Wissens) keine dynamischen Objekte zurückgegeben werden.


----------

