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
 
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)
 
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:
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 ?
 
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:
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.
 
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 😉
 
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:
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.
 
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.
 
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.
 

Zurück
Oben