# Fortschrittsanzeige  bei Datenübermittlung von MsSQL DB



## busa (27. Apr 2005)

Hallo

Ich muss eine grosse Menge an Daten von einer MySQL DB auf meinen Client übertragen. (ca. 100'000 Tupels und mehr). Ich verwende dazu den mysql.jdbc treiber. Meine Frage ist nun: gibt es eine Möglichkeit, z.b mit Hilfe eines Progressbars den Fortschritt der  Übermittlung anzuzeigen?

Besten Dank im Voraus

busa


----------



## DP (27. Apr 2005)

du kennst ja die gesamtmenge an daten. je nach fortschritt entsprecend reagieren...

zu progressbar etc. findest du hier infos oooooohne ende...


----------



## DP (27. Apr 2005)

ausserdem *verschoben*, da es heim jdbc sondern ein gui-problem ist


----------



## mic_checker (27. Apr 2005)

Das sollte z.B. ganz hilfreich sein.


----------



## busa (27. Apr 2005)

Ersteinmal danke für die schnelle Antwort.

Leider hilft es mir nicht weiter. JProgressbar kenne ich, und da liegt auch nicht das Poblem. Sondern wie griege ich raus. wieviele Daten bereits übertragen worden sind? und wieviele Daten es insgesammt sind.  
Das einzige was ich ja mache ist 
	
	
	
	





```
rs = stmt.executeQuery(query);
```
 und während dieser zeit (wo ja die Daten übertragen werden) müsste ich ja den Fortschritt, sprich die bereits übertragenen Daten ermitteln.

gruss busa


----------



## DP (28. Apr 2005)

*zurückverschoben*


----------



## DP (28. Apr 2005)

hier, das sollte dir helfen:

http://www.dpunkt.de/java/Programmieren_mit_Java/Java_Database_Connectivity/46.html


----------



## Bleiglanz (28. Apr 2005)

es geht so nicht, weil du die Anzahl der Records nicht kennst

=> du musst zuerst ein count(*) absetzen für deine Query (das sind dann 100%) und dann kannst du ja bei jedem rs.next() ermitteln, wie weit du bist

evtl. mal schauen, ob du über den JDBC Treiber mysql_stmt_num_rows aufrufen kannst


----------



## busa (28. Apr 2005)

Hallo

So, hab das mal gemacht, nur leider scheint es mit MySQL nicht zu funktionieren.


```
stmt.setFetchSize(10);
		rs = stmt.executeQuery(query);
```
geht auf jedenfall nicht. Die ganzen Tuples werden auf einmal übertragen. Hab noch auf hier auf der Buglist von MySql dot com ein paar gefunden, die das selbe Problem haben. Laut Mysql connector Changelog sollte das Problem ab Version 3.1.7 behoben sein. Doch obwohl ich Version 3.1.8 hab funkioniert es nicht. 

Hat jemand noch ne Idee oder einen Workaround?

Besten Dank für eure Hilfe

Gruss busa


----------



## Bleiglanz (28. Apr 2005)

ehrlich gesagt ist mir unklar, was fetchsize mit deinem Problem zu tun hat???


----------



## DP (28. Apr 2005)

jou, ich hab ihn wohl auf die falsche spur gebracht *voll am blamieren hier*.

mach das wie bleiglanz mit dem count(*), ehe du die daten wirklich abholst...


----------



## busa (28. Apr 2005)

also ehrlich gesagt, jetzt blick ich gar nicht mehr durch.

Das mit dem Count hab ich gemacht. dadurch kriege ich auch die zu übertragenden Tuples.  Somit hätte ich das Max für den Progressbar ;-)
sobald ich jedoch die eigentliche Query ausführe, werden die ganzen Tuples übertragen, was etwa 30  s geht. 
Mit setFetchSize kann man doch festlegen, wieviele tuples auf einmal übertragen wernden, z.b 1000.
Die nächsten 1000 (1001 -2000) werden doch dann erst übertragen, wenn der mit rs.next() auf das erste Tuple des zweiten Packetes zugegfiffen wird. 
Obwohl ich jedoch stmt.setFetchsize(1000) gemacht habe, werden nicht nur 1000 Tuples pro Packet, sondern die ganzen übermittelt.

Sorry, aber ich blick nicht ganz durch wie ihr es meint. könntet ih das kurz skizzieren?

Gruss busa


----------



## AlArenal (28. Apr 2005)

Ja, du stellst ein wieviele auf einmal übertragen werden, das ändert aber nichts an der Größe des ResultSets der DB. Wenn die DB 20.000 Reihen zurückliefert, dann kannste die natürlich auch alle über dein ResultSet ansprechen. 

Wie der Treiber im Hintergrund die Daten überträgt (in welchen Blockgrößen) hat damit ja nix zu tun. 

Wenn du nur einen gewissen Teil an Daten willst, musst du eben mit LIMIT arbeiten.


----------



## busa (29. Apr 2005)

schade. Das mit dem limit ist leider ziemlich aufwendig, da es sich um eine SQL abfrage handelt, und somit auch LIMIT und OFFSET vorkommen, was man alles berücksichtigen muss. Naja, egal. Dann mach ich halt einen inen Progressbar der sich einfach bewegt, damit die User sehen, dass was passiert.

Besten Dank für eure Hilfe. Ihr seid Spitze 

 :applaus:  :applaus:  :applaus:  :applaus:  :applaus:  :applaus:  :applaus:  :applaus: 

Gruss busa


----------

