Anzeige wärend des Ausführens eines Statements

delphiking1980

Bekanntes Mitglied
Hallo,

nachdem ich jetzt meinen Zugriff auf die DB fertig habe wollte ich wenn der Benutzer einen Upload macht eine Anzeige erstellen (JFrame mit Progressbar) aber wie bekomme ich herraus ob der vorgang noch läuft ?

Ich habe nicht immer eine ID die ich in ganz bestimmten intervallen abrufen könnte.

MfG

Delphiking1980
 
S

SlaterB

Gast
was ist denn allgemein ein 'Vorgang'? wie meinst du das mit der Id, einfach nur eine Idee oder gibts da konkreten Hintergriund?

allgemein dürfte es in einem Java-Programm doch Java-Code (X) geben, der einen oder mehrere DB-Zugriffe ausführt,

dieser Java-Code X könnte vorher/nachher Zustandsvariablen setzen, die ein anderer paralleler Thread oder wer auch immer abfragt,
darüber erfährt, ob X noch läuft,
je nach Genauigkeit gar vielleicht wieviel schon geschafft ist (etwa wieviele Durchläufe einer Schleife über 10.000 Elemente)
 
S

SlaterB

Gast
ich weiß nicht worum es in deinem Programm überhaupt geht, was du da machst,
ob du normale JDBC-SQL-ResultSet-DB-Anfragen stellst
(die bezeichne ich als synchron, wie soll man mit dem ResultSet etwas machen wenn das Programm nicht auf das Ende der Query wartet?!)
oder nur anderen Programmen Start-Befehle gibst, dann könnte ich deine Zweifel eher nachvollziehen
 
Zuletzt bearbeitet von einem Moderator:

delphiking1980

Bekanntes Mitglied
Also ich mache ein SELECT,INSERT bzw UPDATE auf eine Tabelle und bei einem SELECT könnte man das ja abfragen ohne probleme aber bei einem INSERT bzw UPDATE wird das wohl schwieriger oder ?
 
S

SlaterB

Gast
jedes dieser JDBC-Kommandos ist synchron, wenn eine komplexe Datenabfrage 5 sec dauert,
dann bleibt der zugehörige Java-Code eben 5 sec an der Zeile
> ResultSet rs = statement.executeQuery(..);
stehen
 
Zuletzt bearbeitet von einem Moderator:

delphiking1980

Bekanntes Mitglied
Nur bekomme ich bei einem Insert/Update kein ResultSet zurück sondern ein Integer mit einem Status ob dieser erfolgreich war.

Ich habe aber ein PreparedStatement.
 
S

SlaterB

Gast
ResultSet vs Integer ist gewiss ein Detail, welches ich nicht extra unterscheiden wollte,
dennoch die gleiche Situation: synchrone Abfrage,
ob PreparedStatement oder normales Statement macht da auch keinen Unterschied,
kannst du auch alles testen?

ist in absehbarer Zeit eine Frage zu erwarten?
hatte im vorherigen Post erst schon gemeckert, aber da hatte ich deins falsch gelesen und dann editiert ;)
 
S

SlaterB

Gast
siehe meine erste Antwort, hinterer Teil, worauhin du das ganze auf 'nicht synchron' gelenkt hattest,
naja, Beschwerde bringt wohl nix

wenn noch was unklar ist und du die Hoffnung noch nicht aufgegeben hast, dass ich es beantworten kann ;) ,
dann mach mal weiter, in welcher Form auch immer,
vielleicht melden sich ja auch andere

edit:
dass ein Teil der Anwendung sich mit der Datenbank beschäftigt, während ein anderer Teil, etwa die GUI, asynchron weiterläuft,
ist natürlich richtig, auch die JProgressBar wäre asynchron zum DB-Teil innerhalb der Java-Anwendung,
geht es dorthin?
 
Zuletzt bearbeitet von einem Moderator:

henpara

Bekanntes Mitglied
Java:
	protected Object doInBackground() throws Exception {
		at.start();
		tt.start();
		at.join();
		tt.join();
hab das auch mal gebraucht (progress-bar, die anzeigt daß ein längerer thread noch am arbeiten ist).
der at-thread macht die arbeit, der tt-thread macht die gui-updates.

Ist mich sicherheit nicht die optimale Lösung, funktioniert aber.
 

delphiking1980

Bekanntes Mitglied
Ja genau so etwas mache ich auch nur wie Stoppe ich den Thread ?

t.stop();

gibt es ja aber das Stoppt mir nur den Thread aber die JFrame bleibt immernoch erhalten.
Gibt es eine möglichkeit mit Stoppen des Threads auch die GUI zu schließen ?

Normalerweise treibt man einen Thread ja in den Selbstmord.

Java:
class Test implements Runnable {

private JFrame frame;
public Test(){
this.frame = new JFrame();
}

@Override
public void run (){
frame.show();
}

public void close(){
frame.dispose();
}

so ist ungefähr mein Ansatz.
 

henpara

Bekanntes Mitglied
Warum willst du den Thread stoppen?

Ich bin so vorgegangen in meinem Gui-UpdateThread:
Java:
	public void run() {

			int val = go.Go.mtxf.getPb().getValue();

			while (val <= max) {
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				++val;
				//System.out.println(val);
				gu.setVal(val);
				SwingUtilities.invokeLater(gu);
				if (val==max) {
					val=0;
				}
				if (at.isAlive()==false) {
					return;
				}
			}
		}

Das ist zwar nicht synchronisiert, und im Prinzip könnte es auch schiefgehen, aber bisher funktioniert es ohne Probleme, wollte die beiden Threads zwar zuerst synchronisieren, hatte dann aber nicht die Zeit dazu, mich einzulesen.
 

Ähnliche Java Themen

Neue Themen


Oben