mute Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 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 Zitieren
flashpixx Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 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 Zitieren
mute Geschrieben 5. Mai 2008 Autor Geschrieben 5. Mai 2008 äää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... Zitieren
Dragon8 Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 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. Zitieren
flashpixx Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 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 Zitieren
mute Geschrieben 5. Mai 2008 Autor Geschrieben 5. Mai 2008 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 Zitieren
flashpixx Geschrieben 5. Mai 2008 Geschrieben 5. Mai 2008 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 Zitieren
mute Geschrieben 7. Mai 2008 Autor Geschrieben 7. Mai 2008 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) Zitieren
ksg9-sebastian Geschrieben 15. Mai 2008 Geschrieben 15. Mai 2008 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.. Zitieren
Empfohlene Beiträge
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.