Threads parallel zur SQL Abfrage

Status
Nicht offen für weitere Antworten.

charlie86

Mitglied
Hallo!

ich habe eine kleine Datenbank im Internet, worauf ich mit einem Java Programm zugreifen möchte. Das Auslesen geht dabei einwandfrei.
Da die Bearbeitungszeit allerdings ab und zu mehrere Sekunden kostet möchte ich parallel eine Animation abspielen. (Sanduhr oder Ähnliches) Allerdings habe ich das Problem, das die Anfrage mit executeQuery(..) das komplette Programm still legt, bis die Daten angekommen sind.

Also hab ich versucht die Anfrage mittels Thread parallel laufen zu lassen, das hat nicht geklappt. Danach die Anfrage und Animation in gesonderten Threads behandeln, aber alles was ich versucht hab führte immer zum selben Ergebnis: Alles Blockiert, bis die Daten da sind...

Ich weiß wirklich nicht mehr weiter, mit Threads hab ich normalerweise nicht viel zu tun, kann mir vielleicht jemand weiterhelfen?

Danke!
 

parabool

Bekanntes Mitglied
kann vielleicht sein daß die Threads nicht gestartet wurden?
Die DB-Operationen folglich nicht nebenläufig ausgeführt wurden.
Also z.B die start-Methode nicht aufgerufen...
Ohne Code kann man da schwerlich etwas sagen.
 

charlie86

Mitglied
danke für die schnelle antwort.. also sobald executeQuery ausgeführt wurde geht alles wieder wie gewohnt parallel (durch flags getestet)

hier mal der sql teil. Es ist eine Innere Klasse, der rest dient nur zur initialisierung und korrekter ausgabe

Code:
class SQLQuery extends Thread {
		public void run() {

			System.out.println("start");  // Flag1

			MySQL conn = new MySQL();
			ResultSet res = conn
				.executeQuery("SELECT name, points, size_x, date FROM highscore"
							+ " ORDER BY points DESC, date");
			
                       System.out.println("query complete");  // Flag2
			
			ArrayList<String[]> list = new ArrayList<String[]>();
			String[] row = new String[5];

			[......]  // Hier werden die Daten vom Resultset etwas verarbeitet 


			} catch (SQLException e) {
				System.out.println(e);
			}
			conn.closeConnection();

			rowData = (String[][]) list
				.toArray(new String[list.size()][]);
			
			System.out.println("stop");          // Flag 3
			t.stop();
		}
	}

der aufruf:
Code:
Thread t;
t = new Thread(new SQLQuery());
t.start();

Folgendes passiert dann im Programm:
-Flag 1 wir ausgegeben, der 2. Thread macht auch brav seine ausgabe
-Beide Threads hängen, Flag 2 ist noch nicht ausgegeben
-Kurze zeit später wird Flag 2 ausgegeben, Thread 2 macht auch wieder weitere Ausgaben
-Flag 3 wird erreicht, der Thread stoppt


//----------------------

EDIT:

ich konnte das Problem lösen, hat sich von selbst erledigt. Ein Thread reicht vollkommen aus. Danke für deine Hilfe.
 

parabool

Bekanntes Mitglied
Du übergibst den Thread-Konstruktor also new Thread(new SQLQuery()) ein weiteres Thread-Objekt.
Der erwartet aber ein Objekt vom Typ Runnable (Interface)

Deine Klassendefinition brauchst du nur in der 1.Zeile zu ändern also statt
Code:
class SQLQuery extends Thread
Code:
class SQLQuery implements Runnable


Ich weiss nicht ob es daran liegen könnte (immerhin liefern beide Threads Ausgaben).
Und die Klasse Thread implementier auch Runnable. (Daher auch keine Fehlermeldung)

Da es eine einzige Abfrage ist, kannst du auch nicht ein Thread.sleep einfügen ,das den 2 Thread ev. die Möglichkeit
geben würde seine Ausgaben zu machen.

Du könnest ev. noch versuchen die Priorität deines 1. Threads zu reduzieren.


EDIT: hab gerade gesehen dass du das problem gelöst hast. klar reicht 1 Thread.
woran lags nun?

Egal-ich schicke den post trotzdem ab.

:wink:
 

charlie86

Mitglied
sry für die verspätete antwort

zunächst zur erklärung: das war als highscore konzipiert: die daten sollten von der datebank geholt werden und dann anschließend in einer tabelle in einem extra panel wiedergegeben werden. während dem zugriff sollte eine dynamische animation laufen. Das hauptprogramm, von dem die threads aktiviert wurde hat von jFrame geerbt.

also hatte ich den thread mit der ladeanimation zunächst gestartet, danach den mit dem datenbankzugriff. Da hatte ich aber das problem das die methode, von wo aus die threads gestartet wurden, natürlich weitergelaufen ist und ne nullpointerexception ausgelöst hat. (ich weiß, schlechter stil, hab da aber nicht drüber nachgedacht, verzweifelt alles mögliche schon getestet)

also hab ich das hauptprogramm durch ne schleife in ein wartezustand geschickt, bis die datenbankoperation fertig war.
dazu ein flag was die schleife abbricht. (gibts eigentlich ne möglichkeit das hauptprogramm "schlafen zu legen" und dann mit notify() oder so aufzuwecken? )

naja der fehler lag daran, dass das hauptprogramm geblockt war, die animation wurde aufgerufen und ist gelaufen, wurde aber nicht angezeigt: warum? weil es im hauptprogramm nie einen repaint gegeben hat, erst wieder, als die schleife fertig war.

Sowas einfaches, aber da muss man erstmal drauf kommen!

eine komplett andere, und besser durchdachte konstruktion hats dann gelöst.


EDIT:

wo liegt eigentlich genau der unterschied zwischen:

Code:
implements Runnable
und
Code:
extends Thread

klar, das eine ist ein interface, das andere eine klasse, aber beide werden ja zur nebenläufigkeit benutzt. Ich benutz immer die extends variante, mit der anderen hatte ich ab und zu kleinere probleme. (liegt wohl an meinen eher geringen Thread erfahrungen)

gruß
 
S

SlaterB

Gast
extends Thread geht nicht, wenn man eine andere Basisklasse braucht,
z.B.
class GUI extends JFrame implements Runnable,

ist aber oft ein Luxux-Problem, man kann fast immer auch zwei separate Klassen verwenden
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Spring Boot Speichern in Threads Datenbankprogrammierung 6
L MySQL Datenbank beschreiben mit mehreren Threads Datenbankprogrammierung 18
T Theorie : Mehrer Threads - Commit (MySQL) Datenbankprogrammierung 17
T Designfrage, DB und Threads Datenbankprogrammierung 8
T apaches dbcp und threads Datenbankprogrammierung 2
J JDBC mit mehreren Threads. Datenbankprogrammierung 8
A MySQL Parallel laufende EntityManager kommen sich in die Quere Datenbankprogrammierung 1
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
J SQLite Abfrage fehlerhaft - komme nicht weiter - please help. Datenbankprogrammierung 3
L PostgreSQL Abfrage mit EclipseLink Datenbankprogrammierung 7
S Berechnung des Datumsunterschieds in der SQL-Abfrage Datenbankprogrammierung 1
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
M Alle Records Felder kriegen für DB Abfrage Datenbankprogrammierung 14
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
nonickatall MySQL SQL Abfrage erneut ausführen oder rs aktualisieren Datenbankprogrammierung 14
Kirby.exe Verständnisproblem bei SQL Abfrage Datenbankprogrammierung 27
N SQL-Abfrage in JTextField ausgeben Datenbankprogrammierung 6
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
W MySQL DB Abfrage in Array, gemischte Array, generelles vorgehen Datenbankprogrammierung 4
D SQL Abfrage optimieren Datenbankprogrammierung 35
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
D Regelmäßige Abfrage aus Workbench Datenbankprogrammierung 6
M SQL-Statement Hilfe bei SQL-Abfrage Datenbankprogrammierung 2
D Abfrage - Spalte(Datum) ändern (Oracle) Datenbankprogrammierung 7
D Datenbank Abfrage Datenbankprogrammierung 7
H MySQL Benutzer Login System mit Datenbank Informationen (Abfrage zu User ist auf DB gesichert) Datenbankprogrammierung 42
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
M MySQL Anbindung und Abfrage an die Datenbank Datenbankprogrammierung 2
RowdyN SQLite Einfache Abfrage mit temporäre Tabelle, die nur innerhalb der Abfrage gültig ist Datenbankprogrammierung 0
E Abfrage auf HSQLDB Datenbankprogrammierung 4
M MySQL SQL Abfrage in JTable mit Berechnung Datenbankprogrammierung 3
S Abfrage von Gruppentickets(Mehrere Resorts an einem Tag) Datenbankprogrammierung 1
S SQL Abfrage Datenbankprogrammierung 2
F Abfrage der letzten Einträge Datenbankprogrammierung 2
J SELECT Abfrage/Suche Datenbankprogrammierung 4
U SQLite Für mich etwa komplexe Abfrage via 2 Tabellen Datenbankprogrammierung 5
OnDemand SQL Abfrage und Equals Datenbankprogrammierung 4
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
M MySQL MySQLSyntaxError in Java, obwohl Abfrage in HeidiSQL korrekt Datenbankprogrammierung 2
ruutaiokwu sql abfrage mit rekursion, mit oder ohne cte... Datenbankprogrammierung 5
J SQLite Abfrage ausführen stoppt für Zyklus? Wie es zu lösen? Datenbankprogrammierung 3
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2
H Derby: SYSCS_UTIL.SYSCS_EXPORT_QUERY mit String Abfrage in wehre-Klausel nicht möglich Datenbankprogrammierung 3
L SQL-Abfrage bricht vor dem Ende ab Datenbankprogrammierung 2
S MySQL Abfrage über mehrere Tabellen + Einträge werden überschrieben Datenbankprogrammierung 1
M Derby/JavaDB Komplexe Abfrage vereinfachen Datenbankprogrammierung 2
S SQL-Abfrage, Filewriter .txt Datei Datenbankprogrammierung 2
P Datenbank- Abfrage mit null'en Datenbankprogrammierung 2
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
D MySQL Erstellen der richtigen Abfrage Datenbankprogrammierung 3
D MySQL DB Abfrage Prüfen Datenbankprogrammierung 10
D JDBC insert mit select abfrage Datenbankprogrammierung 5
E PostgreSQL Exception too ...many clients already bei DB-Abfrage Datenbankprogrammierung 14
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
W No data found: SQL-Abfrage funktioniert nur beim Debuggen Datenbankprogrammierung 3
E Abfrage nach existierender SQL-Tabelle Datenbankprogrammierung 7
H JSON Array abfrage beschleunigen Datenbankprogrammierung 2
S MySQL Abfrage: Wenn Feld leer, alles anzeigen Datenbankprogrammierung 5
Mrtwomoon Abfrage-Ergebnisse in einem Fenster darstellen Datenbankprogrammierung 8
0 SQL Abfrage Bestellung Datenbankprogrammierung 15
G SQLite SQLite Abfrage Datenbankprogrammierung 4
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
Dit_ Hibernate, effiziente SQL-Abfrage definieren Datenbankprogrammierung 5
B My-SQL Abfrage - Out Of Memory Error Datenbankprogrammierung 13
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
K SQLite Einfache DB-Abfrage Datenbankprogrammierung 2
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
C Sortierung bei SQL-Abfrage Datenbankprogrammierung 3
B Bei Abfrage schießt der Speicher in die Höhe Datenbankprogrammierung 6
M SQL Abfrage Dupliakte bei Kreuzvergleich Datenbankprogrammierung 2
M Access Abfrage mit Parameter & Access/Java liefern unterschiedliche Ergebnisse Datenbankprogrammierung 2
G SQL Abfrage Datenbankprogrammierung 5
C SQL-Abfrage Datenbankprogrammierung 4
B SQL-Abfrage Datenbankprogrammierung 4
R SQL Abfrage, je nach ausgewählten Parametern Datenbankprogrammierung 11
C Wert in SQL-Abfrage zählen lassen Datenbankprogrammierung 8
R Memory leaks bei DB Abfrage Datenbankprogrammierung 16
S Abfrage auf SQLite-DB Datenbankprogrammierung 2
I Belastet es das System zu sehr einen Timer jede 0.2 Sekunden eine DB Abfrage machen zu lassen? Datenbankprogrammierung 9
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
G Abfrage von Teilnehmern Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
G JOIN Abfrage über mehrere Tabellen Datenbankprogrammierung 15
F MySQL SQL Abfrage für u.a. Spaltenname key Datenbankprogrammierung 4
G SQLite Abfrage, ob in Tabelle X Spalte Y existiert Datenbankprogrammierung 4
A MySQL Ergebnss aus SQL Abfrage in Hauptklasse verwenden Datenbankprogrammierung 3
N Geschwindigkeit bei if Abfrage Datenbankprogrammierung 11
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G Performante SQL- Abfrage (LIKE %) Datenbankprogrammierung 21
G Join Abfrage Datenbankprogrammierung 12
M db abfrage fehlerhaft Datenbankprogrammierung 5
C MySQL Abfrage mit flexibler WHERE bedingung Datenbankprogrammierung 10
C Datenbank-Abfrage, if im Select Datenbankprogrammierung 9
S MySQL Frage zu LeftJoin Abfrage Datenbankprogrammierung 2

Ähnliche Java Themen


Oben