iBatis, Ladevorgang abbrechen

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo,

kann ich einen Ladevorgang (mit iBatis) eigenlich abbrechen, z.B.: wenn ich 1 Mill. Daten raushole, dann möchte ich einen Progressbar machen, und wenns zu lange dauert, dann breche ich einfach ab, aber die Frage ist halt, ob es eine Befehl für iBatis gibt oder ob ich da sonst irgendwas machen kann,

lg
 

PollerJava

Top Contributor
Weiß da jemand was dazu, wie ich das prinzipiell machen könnte, dass ich die Zeit anzeige, wie lange das laden der Daten noch dauert?

lg
 
T

tuxedo

Gast
Ich bezweifle dass iBatis das kann. Und ich bezweifle auch dass der darunterliegende JDBC Treiber das kann.

Wie ist die Datenbank denn angebunden? Embedded?

Nur als Beispiel:
Mein jPMdbc JDBC Treiber besitzt einen ProgressListener (hab ich ja selbst eingebaut) der den aktuellen Übertragungsprozess anzeigen kann. Den hab ich aber nur deshalb drin weil mein Treiber primär dafür gedacht ist Datenbanken im Internet zu nutzen und deshalb die Übertragung von Natur aus länger dauert. Und damit der Nutzer bei den längeren Übertragungen nicht dumm rumsitzt und denkt die Anwendung steht still hab ich eben den ProgressListener zwischen geschaltet. Aber abbrechen ist auch hier nicht vorgesehen.

Soweit ich mich erinnern kann benutzt dir Firebird?

- Alex
 
G

Guest

Gast
Du weist du hast x Dateien welche zusammen die Größe y MB haben. nun misst du die Zeit die du brauchst um eine bst Größe zu verarbeiten und rechnest das hoch.

Oder du lässt einen Thread immer 1 sekunde lang messen wieviel MB/kb/was auch immer er verarbeiten konnte und rechnest das hoch. Wenn die Daten einigermaßen gleichgroß sind zählst du halt nur die Daten an sich.
 

PollerJava

Top Contributor
Ja genau FireBird (den ganz normalen -> nicht Embeeded),

Wie kann ich dann das machen das der User informiert wird, wie lange es noch dauern kann,

Ich habe ja meine CheckBoxen und wenn der User da wird herumklickt (dann hole ich aus der DB meine "zeitstempel | wert - Tupel" heraus, je nach dem welcher zeitbereich eingestellt ist), dann möchte ich eine Information geben, wie lange es dauern könnte und er sollte die Transaktion dann auch abbrechen können,

Gibts da vielleicht irgendeine Möglichkeit,

iBatis unterstützt logging aber da kann ich mir ja auch nicht direkt was rausholen,
 
T

tuxedo

Gast
Anonymous hat gesagt.:
Du weist du hast x Dateien welche zusammen die Größe y MB haben. nun misst du die Zeit die du brauchst um eine bst Größe zu verarbeiten und rechnest das hoch.

Oder du lässt einen Thread immer 1 sekunde lang messen wieviel MB/kb/was auch immer er verarbeiten konnte und rechnest das hoch. Wenn die Daten einigermaßen gleichgroß sind zählst du halt nur die Daten an sich.

Oha, das ist ja ein absolutes Schätzeisen....Denn die Schätzberechnung ist immer von der jeweiligen Abfrage abhängig. Hat man z.B. Abfragen über mehrere Tabellen kann allein schon die Berechnung der Ergebnistabelle das Schätzergebnis krass verfälschen.

Ist übrigens auch die Frage wie lange die Abfrage der 1Mio einträge dauert? Sinds nur 5 Sekunden? 10 Sekunden? -> Lass eine Lade-Animation anzeigen bis das ResultSet verfügbar ist.

- Alex

P.S. @PollerJava
Ist doch eigentlich ein Datenbank-Thema.. Warum postest du eigentlich immer alles in "Allgemein"?
 

PollerJava

Top Contributor
alex0801 hat gesagt.:
Lass eine Lade-Animation anzeigen bis das ResultSet verfügbar ist.

- Alex

Was ist eine Lade- Animation, wo bekomme ich den die her?

Und ist es nicht irgendwie möglich, eine Laden der Daten abzubrechen, das muss ja fast angeboten werden, wird ja, schätz ich mal, öfter bis sehr oft benötigt?

lg
 
T

tuxedo

Gast
Also heute musst du um 01:23 aufgestanden sein. Ladeanimation = animiertes Gif-File das einen Ladevorgang visualisiert.

Wegen dem abbrechen: Eigentlich hast du recht. Interessiert mich jetzt auch. Ich google auch mal.

Und wie lange dauert denn der abzubrechende Ladevorgang? Hast du's mal gestoppt?

- Alex
 

PollerJava

Top Contributor
nö (5 Uhr)

naja, ich hab jetzt noch nicht so viele daten in meiner DB aber wenn der User Daten von einem Jahr laden will und alle 5s aufgezeichnet wurde dann sind das (365Tage*24h*60min*60s)/5s = 6Mio Daten und das kann sich dann schon in die Länge ziehen,


Eine andere Idee hätte ich noch,
Ich weiß ja, welchen Zeitbereich der User haben will, und ich müsst mir halt den Abstand zweier Messwerte holen (die Abstände sind dann eh immer gleich, z.B.: alle 5sec wird aufgezeichnet), und dann müsste ich noch wissen, wie Lange das herausholen 2er Datensätze/Tupel (zeitstempel | wert) dauert und dann "könnte" ich mir das ganze ausrechnen,

Was haltet ihr davon?
 
T

tuxedo

Gast
Ja, das wäre ne Idee. Aber bevor du da lange rummachst: Stell doch erstmal 10mio testdaten in die DB und probier's aus....

- Alex
 

PollerJava

Top Contributor
keine Ahnung, ob fireBird cancel unterstützt, ich habe nichts gefunden,
auf jeden Fall bin ich jetzt ein bisschen in der Falle,

SQL- Statements gibts ja auch keines, welche das ganze abbricht, und ob mein jdbc das unterstützt:

Code:
driver=org.firebirdsql.jdbc.FBDriver
url=jdbc:firebirdsql:localhost:c:/FireBird/TRENDDB.FDB

Bin für jeden Tipp zum Abbrechen einer Transaktion dankbar,

Sonst die Russische Methode: Verbindung kappen und wieder aufmachen, aber das ist halt auch so eine sache, wenns überhaupt geht,
 
T

tuxedo

Gast
Irgendwie scheinst du meinen Vorschlag die Sache erstmal zu testen zu ignorieren. Vielleicht dauert's ja nur 10 Sek mit so vielen Einträgen. Dann musst du keinen solchen Handstand machen.
Erst wenn du's getestet hast kannst du abschätzen ob es zu einem Problem wird. Bis jetzt ist es nur ein Risiko. Und um mit Risiken besser umgehen zu können macht man Tests.

Verbindung kappen dürfte auch nicht unbedingt funktionieren, schließlich ist die Verbindung ja noch "beschäftigt".
 

PollerJava

Top Contributor
Nö ignoriere nichts, bin gerade dabei, aber ich weiß halt, dass es soweit kommt,denn man kann ja momentan ungehindert auf meinen CheckBoxen herumklicken und wenn ich da von z.B.: 3 Variablen ein Jahr aus der DB hole, dann komme ich mit 10s wahrscheinlich nicht aus,
 
T

tuxedo

Gast
Das mit den Checkboxen kannst du ja noch vor iBatis "verhindern". Dieses Queue-Problem hattest du ja bereits anderweitig angesprochen und dir wurden auch Lösungen angeboten. Die Glaspane Lösung fand ich ganz nett. Aber du könntest auch ne eigene Queue basteln die immer nur 4 Anfragen enthalten kann.

- Alex
 
T

tuxedo

Gast
Wieso frägst du das den Firebird JDBC nicht einfach? Wenn es jemand mit Sicherheit weiß, dann der Treiber.

Aber dann hast du immer noch das Problem dass du mit iBatis da nciht eingreifen kannst.

- Alex
 

PollerJava

Top Contributor
Also, fireBird unterstützt con.createStatement().cancel(); NICHT:

Code:
Not yet implemented

Das sind ja dann gute Aussichten für mich,
Alternative gibts da wohl keine?
Ist das das ende der Fahnenstange?

Das Auslesen aus der DB von 400000 Werten dauert ein bischen mehr als 3s, das finde ich eh einen gute zeit, aber es würd mir halt darum gehen, wenn versucht wird z.B.: 2 Mio. Werte auszulesen.

Gibt es eigentlich einen SQL- Befehl, mit dem ich bestimmen kann, wie weil 2 Werte auseinander liegen bei (zeitstempel | Wert -> wie weit da die Zeitstempel auseinander liegen)?



alex0801 hat gesagt.:
Die Glaspane Lösung fand ich ganz nett.
- Alex


Ich habe einen BorderLayout, geht das, dass ich die Glasplatte nut auf dem Border.East aktiviere?


lg
 
T

tuxedo

Gast
hab ich mir gleich gedacht dass dieses cancel() nicht drin ist.

400.000 Werte in 3 Sekunden bei einer embedded DB ... Ist denke ich ne recht gute Zeit.

Wenn du 2Mio Einträge auswählen willst, dann weisst du doch schon bevor alles runter zu iBatis geht, wieviel das sein wird. Du kannst auch folgendes tun:

Bastle eine Abfrage die die Anzahl der Zeilen in Bezug auf die Bedingung zurückgegeben werden. Also z.B. sowas hier (untested, nur kurz zusammengeschmiert):

Code:
SELECT count(id) FROM meineTabelle WHERE <hier kommt halt die Bedingung hin>

Das sollte eigtl ziemlich schnell gehen, auch bei großen Tabellen mit vielen Einträgen. So weißt du dann wenigstens mal ob 400.000 oder 2Mio Zeilen im Ergebnis zu erwarten sind und kannst ggf. dem User einen Dialog präsentieren nach dem Motto "Die Abfrage könnt ggf. länger dauert. Abfrage wirklich durchführen? -> JA/NEIN(/nicht sicher LOL)"

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G iBatis Konfiguration Allgemeine Java-Themen 5
E Datenbank/iBatis Fehlermeldung Allgemeine Java-Themen 4
G iBatis Datenbankwechsel Allgemeine Java-Themen 2
MQue über iBatis Tabellen erzeugen Allgemeine Java-Themen 4
E iBatis und wie oft wird eine Verbindung hergestellt Allgemeine Java-Themen 5
P iBatis reconnect Allgemeine Java-Themen 17
OnDemand Thread / Service abbrechen Allgemeine Java-Themen 3
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
C Threads ExecutorService shutdown abbrechen und service "starten" ? Allgemeine Java-Themen 3
N Prüfen ob Methode ausgeführt wird und diese ggf. abbrechen? Allgemeine Java-Themen 8
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
T Verschachtelte Schleifen abbrechen Allgemeine Java-Themen 3
O Verschachtelte Iteration: Innere Iteration abbrechen Allgemeine Java-Themen 3
J Code-Sequenz nach 10 sec abbrechen? Allgemeine Java-Themen 3
N Methode abbrechen? Allgemeine Java-Themen 3
G Timer abbrechen und neu starten Allgemeine Java-Themen 3
G Aufrufende Methode abbrechen Allgemeine Java-Themen 5
G timer mit buttondruck abbrechen Allgemeine Java-Themen 7
M InputStream.read abbrechen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben