# Lange wartezeit bei Netzwerkzugriff...



## AJRames (16. Jun 2009)

Hi Leute!
Ich hab einen java Client geschrieben, der Daten von 2 unterschiedlichen servern emfängt.(Einmal Access und einmal HSQLDB)
Wenn ich das Programm nun starte und zb nen neuen Datensatz anlege oder einfach nur die Datensätze anzeige braucht es erstmal ein paar sekunden (ca.5) bis es reagiert! Obwohl die Abfragen nicht so hammer viel sind...

An meinem Lappi, meinem Haupt-PC und am Lappi meiner mom ists so....(wobei es am Hauptrechner ein wenig schneller geht).
Ich habs letztes in der Firma probiert und da funktioniert es hammer schnell...obwohl mir da die richtige Datenbank zur Verfügung steht, mit viel mehr Datensätzen...
Woran könnte es liegen? Netzwerklast ist laut Taskmanager bei max. 1% wenn ichs ausführe. Kanns sein das er zum rechnen einfach solang braucht??? (kann ich mir nicht wirklich vorstellen).
Hier aufm Hauptpc geht die Prozessorauslastung dann schon hoch.....(Single Core, 3200+).
Der Client im Geschäft ist auch keine hammer maschine...

Ich weiss nicht mehr weiter  Für die Präsentation sollte es am besten auf meinem Lappi auch schnell laufen...
Wär froh wenn ihr mir helfen könntet....

Gruß AJ


----------



## HoaX (16. Jun 2009)

Vielleicht ist der Datenbankserver bei euch in der Firma einfach stärker? Wie schauts denn bei einfachen Abfragen wie select count(1) from tabelle nachWahl; aus? Läuft HsqlDB embedded oder standalone? Was passiert wenn du nur Access oder nur HsqlDB verwendest? ...


----------



## AJRames (16. Jun 2009)

Also wenn ich die Abfrag in Access bzw nur in HSQL durchführe läufts schnell! Leider kann ich aus meinem programm keine abfragen nur ein eine DB schicken.
Aber ich habe grad noch etwas festgestellt...Ich führe mehrere Abfragen nacheinander durch, bzw fast sogar gleichzeitig.
Kurze veranschaulichung an einer Methode (erst da habs ichs festgestellt).

Wenn ich nen Button drücke werden mir alle Kundenanfragen ausgegeben.
Jetz ist es leider so, das beim Ansprechpartner nur die Personennummer hinterlegt ist. Um dazu den Namen zu finden muss ich nochmal ne Abfrage starten. Ebenso wenn ich die Name der Firma darstellen möchte.
Die daten die ich bekomme füg ich in eine JTable.

Jetz ist es natürlich so das ich für den Namen der Firma und den Ansprechpartner wieder abfragen durchführe.

Ca. so:
...
ps2 = v.verbinden().prepareStatement("SELECT * FROM ANFRAGEN WHERE KDNR LIKE '"+ kdnr + "';");
res2 = ps2.executeQuery();

while(res2.next()){
                    dtm.setValueAt(res2.getString("ANFRAGEID"), z, 0);
                    dtm.setValueAt(il.getFirmName(res2.getString("KDNR")), z, 1);
                    dtm.setValueAt(il.getPersName(res2.getString("ANSPRECH")), z, 2);

...

mit dem Objekt il.get.. führe ich eben auch anfragen durch.
Als ich diese ersetzt hab liefs wie schmids katze! Wenn ichs jedoch so lasse dauerts ne weile.
Irgendwie auch verständlich....
Kann mir jemand sagen ob das so normal ist? Kann ich das nicht aus der welt schaffen? Mach ich was falsch?

Danke...

edit:
Wahnsinn ich hab grad die 2 Zeilen:

dtm.setValueAt(il.getFirmName(res2.getString("KDNR")), z, 1);
dtm.setValueAt(il.getPersName(res2.getString("ANSPRECH")), z, 2);

in 

 dtm.setValueAt(res2.getString("KDNR"), z, 1);
 dtm.setValueAt(res2.getString("ANSPRECH"), z, 2);

geändert! KEINE Zeitverzögerung...
Jetz weiss ich wenigstens worans liegt...
Was meint ihr, wie kann ich die Sache mit den Namen sonst lösen?
Weil momentan nur nummen in der liste angezeigt werden...


----------



## tuxedo (17. Jun 2009)

Was macht denn 


```
il.getFirmName(res2.getString("KDNR "))
// ... und ...
il.getPersName(res2.getString("ANSP RECH"))
```

denn genau? Irgend was da drin scheint zu bremsen...

- Alex


----------



## AJRames (18. Jun 2009)

Diese beiden Objekte führen wieder abfragen durch, zb:
"SELECT Name FROM XXX WHERE PersonNr = ?;"

Ja ist klar das es ewig braucht. Ich führe pro gefundenen datensatz nochmal 2 abfragen durch...
Danke trotzdem ^^ Habs jetz anders gelöst....


----------



## HoaX (22. Jun 2009)

Also jede halbswegs ernst zu nehmende DB kann auch Joins, so bräuchtest du sogar nur eine Abfrage. Und evtl. solltest du einen Index in der DB über Kundennr usw erstellen, selbst mit den Unterabfragen sollte das nicht so lange dauern. Ich kenns von JPA und Lazy-Loading ...


----------

