Zum Inhalt springen

kontrolliere DB Ausgabe mit SWT


Empfohlene Beiträge

Geschrieben

Hallo.

Ich studiere Angewandte Informatik und bin jetzt im 2. Semester.

Wir Programmieren Java im Zusammenhang mit Datenbanken (im Moment nur Access, danach MySQL) und SWT.

Also in der Konsole wird die Datenbank einwandfrei ausgegeben, die Anzeigen in den Textfeldern klappt auch einwandfrei.

Nun sollen jedoch nicht alle Datensätze auf einen Schlag ausgegeben werden, sondern kontrolliert durch die Buttons.

Ich habe dies schon auf verschiedensten Wegen probiert, bisher leider ohne Erfolg.

Vielleicht könnt ihr mir helfen...

Hier gibts die DB und meine File (DB im DSN als musi angeben):

http://www.iks.hs-merseburg.de/~7awinkle/Java/db3.java

http://www.iks.hs-merseburg.de/~7awinkle/Java/musik.mdb

danke schonmal

Geschrieben

Hallo,

entweder passt Du Deinen Select mit Limit oder Count an oder Du musst Deine While-Schleife passend terminieren, so dass er immer nur aus dem Recordset die nächsten XX Datensätze durchläuft

HTH Phil

Geschrieben

ääähhmmmm ja

tut mir leid, aber ich nix verstehen^^....wie gesagt: 2. semeser, soweit sind wir da noch nicht :)

es soll quasi bei start nur der 1. datensatz geladen werden und durch betätigen der buttons jeweils der letzte bzw der nächste...

Geschrieben

flashpixx wollte dir damit sagen, dass du entweder deine Abfrage der Datenbank anpassen muss, sodass diese immer nur den Datensatz zurück liefert den du haben willst.

Oder du änderst deine While-Schleife, die dein ResultSet ausliest, dahingehend, dass der nächste datensatz erst ausgelesen wird, wenn der benutzer auf den "Weiter" - Button drückt.

Geschrieben

Hallo,

tut mir leid, aber ich nix verstehen^^....wie gesagt: 2. semeser, soweit sind wir da noch nicht :)

aber gerade im Studium sollte man diese Haltung nicht vertreten. Ich gehe davon aus, dass SQL behandelt wurde ebenso wie Programmierung. Die Problemlösung hat nichts mit der Sprache zu tun.

Du wirst hier auch niemanden finden, der Dir eine komplette Lösung vorgibt, denn Du sollst sie selbst entwickeln. Außerdem auch der Tipp: Zu einer Vorlesung kann man begleitend auch mal ein SQL Buch oder Java Buch lesen und sieht dort sehr viele Beispiele.

Phil

Geschrieben
Oder du änderst deine While-Schleife, die dein ResultSet ausliest, dahingehend, dass der nächste datensatz erst ausgelesen wird, wenn der benutzer auf den "Weiter" - Button drückt.

genaus das ist auch der plan ;)

wie ich schon schrieb habe ich dahingehend auch schon einiges ausprobiert, doch es gelingt mir leider nicht....daher habe ich auf einen kleinen anstoß gehofft....

aber gerade im Studium sollte man diese Haltung nicht vertreten. Ich gehe davon aus, dass SQL behandelt wurde ebenso wie Programmierung. Die Problemlösung hat nichts mit der Sprache zu tun.

das ist so nicht ganz korrekt....SQL wurde nicht behandelt, es kommt erst im nächsten semester (das spielt hier aber auch keine rolle)

und sicherlich haben wir schon einiges in java programmiert...sonst wär ich auch nicht so weit gekommen....

es macht mit den eindruck als denkst du, ich hätte mir bis hierher alles irgendwoher geholt...nein, das ist selbst geschrieben und nun fehlt mir leider eine idee, wie es weiter geht

Du wirst hier auch niemanden finden, der Dir eine komplette Lösung vorgibt,

das will ich auch nicht

denn Du sollst sie selbst entwickeln.

ganz meine meinung

ich will es ja selbst schaffen und es macht mir auch sau viel spaß daran rum zu tüfteln, nur leider habe ich keine idee wie ich das an der stelle umsetze...ich habe nur auf einen kleinen gedankenansatz (evtl auch in form von code) gehofft

Geschrieben

ich will es ja selbst schaffen und es macht mir auch sau viel spaß daran rum zu tüfteln, nur leider habe ich keine idee wie ich das an der stelle umsetze...ich habe nur auf einen kleinen gedankenansatz (evtl auch in form von code) gehofft

Wie ich schon im ersten Postion geschrieben habe, passe Deinen SQL Select an (dies ist ggf von dem eingesetzten DBMS abhängig): SELECT * FROM TABEL WHERE ???? LIMIT ????"

Oder eben Du fügst in Deiner Whilescheife etwas der Gestalt ein:

while (!rs.EOF)

tue irgendwas mit dem Datensatz

if ((i++)%n == 0)

tue irgendwas bei jedem n. Datensatz

end if

end while

Wenn Du es via Buttonklick machen willst, dann schreibe eine Methode, die die Datensätze ausgibt, diese rufst Du bei jedem Buttonclick (im passenden Listener) auf. Ich setze voraus, dass Methoden, deren Sichtbarkeit, Klassen / Objekte, Swing / AWT bekannt sind.

Der Eindruck, dass Du eine Lösung möchtest entsteht bei mir durch die Aussage "nix verstehen", denn ich habe einen Denkanstoß geliefert, mit dem Du gezielt weiter suchen kannst. Ich weiß, dass es für beide Ansätze eine große Anzahl an Literatur (Web / Buch) gibt. Es gibt z.B. von Oreilly ein sehr gutes Buch für Swing

Phil

Geschrieben

hmm

also ich habe erstma das gesamte etwas abgeändert

die textfelder sind bei mir nun ein array und werden erst in der datenbankabfragerschleife definiert

darüberhinaus habe ich mri eine möglichkeit überlegt mit einer neuen boolean variable zu realisieren

boolean next=true;
die schleife für die datenbankabfrage sieht dann so aus:
while (rs.next() && next==true)
meine tabelle soll erstmal 10 einträge anzeigen, dabei läuft i mit...
if (i==9) next=false;
wenn 10 angezeigt werden stoppt also die schleife nun wollte ich in meinem listener vom button wieder
next=1
setzen, leider bekomm ich dann den fehler dass ich daraus nicht diese variable verändern darf darüberhinaus viel mir auf, dass er an dieser stelle eigentlich ja bereits aus der schleife rausgegfangen ist und somit das auch nichts bringen würde....ist diese überlegung richtig? nun habe ich versucht die datenbankabfrage in eine methode zu stecken um diese nur per buttonklick auszuführen (eben wie du es mir ans herz gelegt hast)...leider gelingt mri dies nicht. Bisher haben wir nur einfach extra-methoden wie gettext und settext geschrieben. das dadurch vorhandene wissen umzuwandeln gelingt mir leider nicht so wirklich ich versuchte nun erstmal das erstellen der überschriftlabels in eine methode zu fassen...
public static void design () {

    ...erstellung der labels...

}
um dies dann anzuwenden muss ich ja eine neue instanz des designs in meiner main fkt holen
design d = new Design();

hmm nun funktionierte dies nicht wirklich

ich bin mir relativ sicher, dass ich rein elementare fehler machen...was nat. weniger gut ist

wäre für hilfe sehr dankbar...

PS: das soweit erstma funktionierende programm habe ich wieder auf meinen webspace geladen (das alte überschrieben)

Geschrieben

Aaaalso das Teil was du aufrufen willst ist eine statische Methode, d.h. Aufruf über Klassenname.Methodenname. In deinem Fall reicht der methodenname, also design();

Was du so grundsätzlich tun kannst:

- beim Start liest du die Anzahl der vorhandenen Datensätze aus:

"SELECT count(<id spalte>) FROM <tabelle>".

Dann ein rs.next() und rs.readInt(); (rs = ResultSet).

Den Wert speicherst du dir dann in einer privaten Variable (maxSaetze).

Dann speicherst du die ID des aktuellen Datensatzes in einer anderen Variable (z.B. aktuellerSatz = 0).

Beim klick auf den Button machst du dann sowas wie

if(aktuellerSatz == maxSaetze) aktuellerSatz = 0;

showRecord();

Da du grade den letzten Datensatz hast musst du wieder auf den ersten Springen.

Dann rufst du ne Methode auf welche den Datensatz ausliest und in der GUI darstellt, z.B.

private void showRecord(){

ResultSet rs = con.createStatement().executeQuery("SELECT * FROM <tabelle> LIMIT " + aktuellerSatz + ", 1);

// will heißen einen Datensatz ab der Stelle <aktuellerSatz>

// code um aus dem ResultSet zu lesen und die Infos in ger GUI darzustellen

// am ende dann aktuellerSatz +1

aktuellerSatz++;

}

Das ganze dann in ne GUI-Klasse verpackt (wir sehen mal von MVC ab)


public class MyGUI extends JFrame{

  private int maxSaetze = 0;

  private int aktuellerSatz = 0;

   // diverse Buttons und Textfelder fehlen

  private Connection con;


  private void init(){

      // Connection zur Datenbank

      // Anzahl an Datensätzen auslesen

      showDataset();

  }

  private void showDataset(){

     // Satz mit der Nummer <aktuellerSatz> auslesen und darstellen

     aktuellerSatz++;

  }

  // wird vom Button "nächster Datensatz" aufgerufen

  private void nextDateset(){

     if(aktuellerSatz == maxSaetze){

        aktuellerSatz = 0;

     }

     showDataset();

  }

  // wird vom Button "vorheriger Datensatz" aufgerufen

  private void prevDateset(){

     if(aktuellerSatz == 0){

        aktuellerSatz = maxSaetze;

     }

     showDataset();

  } 

  public void main(){

      MyGUI gui = new MyGUI();

      // GUI-spezifischer Code

      gui.setVisible(true);

  }

}


Musst halt das Gerüst noch vervollständigen, Buttons, Textfelder, Actionlistener u.s.w. anlegen..

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...