Java SQL Abfrage Problem

tobsel

Urgestein
Thread Starter
Mitglied seit
02.09.2011
Beiträge
6.353
Hallo,
ich bin gerade dabei mithilfe von Java und MySQL ein Quiz zu Programmieren. Dazu habe ich eben eine Datenbank mit Fragen (vorgegeben).
Allerdings bin ich noch Anfänger und daher naja

Die Datenbank ist wie folgt aufgebaut:

NR (INT)|Frage|Antwort1|Antwort2|Antwort3|Antwort4|richtige Antwort (INT)

Meine Bisherige Methode zur Ausgabe einer Frage aus der Datenbank sieht so aus:

[Java] public static void printFrage() { conn = getInstance(); if(conn ! - Pastebin.com

Nur wird eben hier da "nr is like'1'" immer Frage 1 ausgewählt. Eine Zufällige Zahl im Bereich 1 - Maximale Fragenzahl steht mir zur Verfügung.

Ich will jetzt also z.b. Frage 7 auswählen. Einfach mit einer Variable statt einer Zahl im SQL Statement geht das ja nicht. Wie kann ich das aber trotzdem so machen das die Zahl dort variabel ist?

Ich währe wirklich für jede Hilfe dankbar ;)

Wenn es noch Fragen oder Unverständlichkeiten gibt immer her damit.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Du hast da einen kleinen Fehler. Like '1' macht wenig Sinn aus zwei Gründen. Erstens ist die Spalte eine Zahl und kein Text. Daher wären die normalen Vergleichsoperatoren oder sogar between sinnvoller. Zweitens würde man selbst bei Text Like nur nehmen wenn man auch vor hat nur einen Teil des Textes durch das % Zeichen zu ersetzen.

So oder so hat das aber nichts mit deinem Problem zu tun. Du willst einen Zufälligen Datensatz. Dafür gibt es diverse Lösungsmöglichkeiten.
1.) Alle Datensätze abfragen und dann in Java einen Zufälligen Datensatz auswählen. Der Tod für die Performance. Daher kommt die Lösung nicht in Frage.
2.) where nr= <von Java generierte Zufallszahl>. Dazu müsstest man aber erstmal die Anzahl der Datensätze kennen um eine geeignete Zufallszahl zu generieren. Mit Select max wäre das zwar möglich aber sobald ein Datensatz gelöscht wird, ist die Datensatznummer nicht mehr vorlaufend. Erwischt man mit der Zufallszahl genau den gelöschten Datensatz, wird's hässlich. Man könnte in dem Fall das Spiel in einer Schleife machen aber damit sind wir wieder bei der Performance. Kommt daher auch nicht in Frage.
3.) where rownum=<von Java generierte Zufallszahl>. Selbes Spiel in Grün mit dem Unterschied, dass die gelöschten Datensätze kein Problem mehr sind und vorher mit Select sum die Anzahl ermittelt werden muss.

Jetzt kommen die eigentlich interessanten Lösungen.
4.) where rownum = <Zufallszahl der Datenbank>. Auch für diese Zufallszahl muss man den Wertebereich kennen aber das ist mit einer Unterabfrage in einem SQL Befehl möglich.
5.) where rownum=1 order by rand. Datensätze zufällig sortieren und dann immer den ersten Datensatz nehmen.
 
Hey danke für deinen Beitrag. Genau auf so jemanden hab ich gewartet.

Also alle Fragen Abfragen und dann in Java die richtige auswählen kann man vergessen. Sind knapp 2000 Fragen. Deshalb schaue ich mir nun mal das mit der Nr 4 an und Berichte dann wieder.
 
So ich hab's eben ausprobiert ;) Hat bestens geklappt. Danke dir!
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh