# Komplexer Tabellen-Join und Ausgabe in Excel



## Fleur de Soleil (19. Jul 2011)

Hallo zusammen,

ich hab ein größeres Problem, bei dem ihr mir hoffentlich weiterhelfen könnt. Habe mehr oder weniger zwei Fragen: 

1. Wenn ich über JDBC ein komplexes JOIN-Statement an meine Datenbank schicke, wird der JOIN dann auf dem lokalen Rechner oder auf dem Datenbankserver ausgeführt?

2. Mit Hilfe von APIs wie JExcelAPI oder POI lassen sich Daten ja ganz gut nach Excel exportieren. Kann ich da auch gleich ein Resultset exportieren oder welche "Form" eignet sich dafür am besten??

LG Fleur


----------



## rhoermann (19. Jul 2011)

1. das Statement wird immer DB seitig ausgeführt. Wenn du mit z.B Hibernate arbeitest wären am Client noch Optimierungen möglich, aber die abgesetzten Statements werden immer von der DB ausgewertet.

2. Ich denke nicht, daß POI oder JExcelAPI einen Adapter für ResultSet haben, aber wenn ja, dann kannst du natürlich diese verwenden.

Ansonsten bleibt es dir überlassen wie das Ausgabeformat aussehen soll. Eine Tabelle oder Formular Style, mit oder ohne Grafiken....

Einfach das ResultSet iterieren und mit entsprechenden get Aufrufen die Daten pro row auslesen. Und einfach die Daten mit POI oder JExcelAPI schreiben.


----------



## Fleur de Soleil (20. Jul 2011)

Hallo und danke 

Hört sich ja schon einmal gut an, dass die Berechnungen auf der Datenbank selbst ausgeführt werden. Hatte es mir schon fast gedacht, weil der lokale Rechner wohl sehr schnell an seine Grenzen stoßen würde. Mit Hibernate kenne ich mich leider nicht wirklich aus, aber werde ich mich wohl einlesen müssen, da ich jede Optimierungsmöglichkeit nutzen muss, soll so performant wie möglich werden.

LG Fleur


----------



## ARadauer (20. Jul 2011)

Mhn ob jetzt Hibernate besser als ich fähig ist mir einen komplexen Join zu optimieren, das bezweifle ich.
Überhaupt bei vorhandenen Datenbanken.. nimmt es da Rücksicht auf indizes usw?

Ich würde bewusst bei gewissen Reporting oder Batch Themen auf Hibernate verzichen da ich mit plain jdbc besser optimieren kann.


----------



## Fleur de Soleil (20. Jul 2011)

Hi ARadauer, 

du sprichst mir aus meinem Herzen  Wäre sehr gut, wenn ich plain jdbc nutzen könnte, weil ich mich da mehr oder weniger auskenne und mich nicht komplett neu einlesen müsste. Und was der Kern meiner Aufgabe ist hast du anscheinend auch erkannt. Es handelt sich um BATCH-Verarbeitungen die Auswertungen von Datenbankdaten in Excel erzeugen sollen. 

LG Fleur


----------



## rhoermann (20. Jul 2011)

Ich hätte dir nicht empfohlen Hibernate zu verwenden, und Hibernate tuned ein Statement wohl nicht schneller als ein Entwickler der mit Optimierungstechniken vertraut ist! Ich meinte nur, das mit Hibernate diverse Optimierungen möglich wären, weil Hibernate da etwas mehr anbietet. Aber schneller wird die Auswertung dadurch nicht. Hibernate war ja auch nur ein Beispiel. Da sind andere ORMapper nicht gravierend anders.

Dein Problem ist mit direkter JDBC Verwendung ohne Probleme zu lösen. Klang ja nicht so als bräuchtest du Connection Pooling, Caching, usw. 

Also einfach ein PreparedStatement absetzen, die Rows durchgehen und dein Excel erstellen. Das sollte in wenigen Minuten laufen!


----------



## ice-breaker (20. Jul 2011)

Fleur de Soleil hat gesagt.:


> da ich jede Optimierungsmöglichkeit nutzen muss, soll so performant wie möglich werden.



dann solltest du dich mit Datenbankoptimierung beschäftigen und nicht ob Hibernate oder sonstwer schneller ist. Eine schnellere Library kann dir vllt einen maximalen Performanceschub von 100% bringen, die Datenbankoptimierung aber locker den 100 fachen Wert, wenn du irgendwo "Fehler" im Design der Datenbank gemacht hast und dann wirklich komplexe Abfragen machst.


----------



## Fleur de Soleil (21. Jul 2011)

Ihr seid der Hammer, danke für die vielen verschiedenen Meinungen. 

Kurze Frage noch, gibt es eine Möglichkeit, aus Java heraus, eine Temp Table auf meiner DB zu erzeugen und mit der weiter zu arbeiten??

LG Fleur


----------



## ARadauer (21. Jul 2011)

Du meinst einfach eine temporäre Tabelle?
Klar warum nicht? Du kannst alles machen, was du über Queries machen kannst. Ein Create TABLE geht natürlich...

Ich würds aber micht machen  Wozu brauchst du die Tabelle? Schau dir mal VIEWS an


----------



## Fleur de Soleil (21. Jul 2011)

Die tempTables brauche ich weil ich einige Zwischenschritte habe. Ich erzeuge durch Joins von mehreren Tabellen mehrere temporäre Tabellen und joine die am Ende alle zusammen zu meinem Endergebnis. Das ganze in einem SQL Befehl zu machen ist denke ich viel zu kompliziert, die einzelnen sind jetzt schon ziemlich dicke 

Sind die Daten der Views auf der Datenbank oder auf dem lokalen Rechner? Im Prinzip ist ein View nur eine andere Sicht (mit Einschränkungen) auf eine Tabelle. Sind Views auch auf Joins möglich??

LG Fleur


----------



## homer65 (21. Jul 2011)

Views auf Joins sind möglich.
Views beinhalten keinerlei Daten. 
Die Daten sind in den zugrundeliegenden Tabellen gespeichert.


----------



## tuttle64 (21. Jul 2011)

Fleur de Soleil hat gesagt.:


> Die tempTables brauche ich weil ich einige Zwischenschritte habe. Ich erzeuge durch Joins von mehreren Tabellen mehrere temporäre Tabellen und joine die am Ende alle zusammen zu meinem Endergebnis. Das ganze in einem SQL Befehl zu machen ist denke ich viel zu kompliziert, die einzelnen sind jetzt schon ziemlich dicke




Guter Ansatz. Üblicherweise lässt man derartige SQLs als Batch ablaufen. Ist die Auswertung einmalig oder wiederholt?

Zu den Views: Es ist richtig, dass Views keine Daten enthalten. Sollte jedoch die Datenaufbereitung nicht performant sein, gibt es z.B. von Oracle das Konzept von materialized views. Mit welcher DB arbeitest Du?


----------



## Fleur de Soleil (22. Jul 2011)

Hallo zusammen,

also das ganze passiert auf einer Informix-Datenbank und das wiederholt (monatlich, quartal). Bis jetzt wird das ganze durch BATCH-Programme übernommen, die als Ergebnis csv-Dateien erstel-len. Diese werden dann anschließend durch VBA-Code innerhalb von Excel nach Excel importiert und formatiert. Diese Zwischenschritte würden wir uns gerne sparen und das ganze Zentral ablaufen lassen. Ist dies in einem Java-Programm möglich?

LG Fleur


----------



## turtle (22. Jul 2011)

Ein gutes (ORM)-Framework solltest Du Dir ansehen: MyBatis Home.

Dieses erlaubt die Nutzung von "purem" SQL-Befehlen ohne "Hibernate-Schnickschnack" und wenn Du schon SQL hast kannst Du es einfach weiter verwenden!

Vorteil: Du musst SQL schreiben und weißt daher genau welcher Befehl gegen die DB läuft.
Nachteil: Du musst SQL schreiben und kein Framework erledigt dies für Dich.

Ich kann es nur empfehlen


----------



## Fleur de Soleil (25. Jul 2011)

Hallo, 

ist dafür überhaupt ein Framework notwendig? Geht das ganze nicht auch mit plain jdbc?? Hab leider noch ein Problem, dass gelöst werden müsste. Ist es möglich in einem Statement auf mehrere Datenbanken zuzugreifen?? Der zentrale Datenpool besteht leider aus mehreren Datenbanken auf die bis jetzt gleichzeitig zugegriffen wird. Dafür bräuchte ich in Java aber zwei Connections....geht so etwas??

LG Fleur


----------



## turtle (25. Jul 2011)

Geht das ganze nicht auch mit plain jdbc?? 
Ja, schon. Ich rate aber von der direkten Nutzung von JDBC ab. Die korrekte Freigabe von Resourcen/Statements/Connections ist nicht ohne und sollte meiner Meinung nach ein Framework machen.
Ist es möglich in einem Statement auf mehrere Datenbanken zuzugreifen?? 
Ja. Kommt meinem Verständnis auch ein bisschen darauf an, ob mit den Verbindungsdaten der ersten Datenbank  (User, Passwort) auch auf das Schema (Tabellen) für die zweite Datenbank zugegriffen werden kann. Dann ist's doch "nur" ein Join, oder?
Dafür bräuchte ich in Java aber zwei Connections....geht so etwas??
Ja, ich sehe aber nicht warum da zwei Verbindungen aufgebaut werden müssen.


----------



## tuttle64 (25. Jul 2011)

Fleur de Soleil hat gesagt.:


> Hallo zusammen,
> 
> also das ganze passiert auf einer Informix-Datenbank und das wiederholt (monatlich, quartal). Bis jetzt wird das ganze durch BATCH-Programme übernommen, die als Ergebnis csv-Dateien erstel-len. Diese werden dann anschließend durch VBA-Code innerhalb von Excel nach Excel importiert und formatiert. Diese Zwischenschritte würden wir uns gerne sparen und das ganze Zentral ablaufen lassen. Ist dies in einem Java-Programm möglich?




Sofern Java auf dem Server verfügbar ist, kann man die Formatierungen auch von Java durchführen lassen. Wie komplex sind diese Formatierungen?


----------



## Fleur de Soleil (26. Jul 2011)

Guten Morgen,

also die Formatierung werde ich mit POI machen. Wird auch bereits in anderen Bereichen eingesetzt. Anscheinend erfüllt Java somit alles was ich benötige.

Danke euch 

LG Fleur


----------

