Datenbank

Rim123!

Mitglied
Erstellen Sie eine Leiste für den Dialog zum Bearbeiten der Datensätze, in der unten im Dialog die Nummer des aktuellen Datensatzes und die Anzahl aller Datensätze angezeigt werden. Der Dialog mit der Leiste könnte ungefähr so aussehen:



Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.ResultSet;

import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;

public class BearbeitenEintrag extends JDialog {
    //automatisch über Eclipse erzeugt
    private static final long serialVersionUID = 2674865770208476234L;
   
    //für die Eingabefelder
    private JTextField name, nachname, strasse, plz, ort, telefon;
    //für die Anzeige
    //für die Anzeige füge ich datensatz ein........Einsendeaufgabe nummer1
    private JLabel nummer,datensatz;

    //für die Aktionen
    private MeineAktionen loeschenAct, vorAct, zurueckAct, startAct, endeAct, aktualisierenAct;
   
    //für die Verbindung
    private Connection verbindung;
    private ResultSet ergebnisMenge;
   
    // Counter zum Zählen der Datensätze
    //...................................Einsendeaufgabe nummer 1
    private int rowCount;
   
       
   
    //für die Abfrage
    private String sqlAbfrage;
   
   
   
    //eine innere Klasse für die Aktionen
    class MeineAktionen extends AbstractAction {
        //automatisch über Eclipse ergänzt
        private static final long serialVersionUID = 8673560298548765044L;

        //der Konstruktor
        public MeineAktionen(String text, ImageIcon icon, String beschreibung, KeyStroke shortcut, String actionText) {
            //den Konstruktor der übergeordneten Klasse mit dem Text und dem Icon aufrufen
            super(text, icon);
            //die Beschreibung setzen für den Bildschirmtipp
            putValue(SHORT_DESCRIPTION, beschreibung);
            //den Shortcut
            putValue(ACCELERATOR_KEY, shortcut);
            //das ActionCommand
            putValue(ACTION_COMMAND_KEY, actionText);
        }
       
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("vor"))
                ganzVor();
            if (e.getActionCommand().equals("zurueck"))
                ganzZurueck();
            if (e.getActionCommand().equals("einenvor"))
                einenVor();
            if (e.getActionCommand().equals("einenzurueck"))
                einenZurueck();
            if (e.getActionCommand().equals("loeschen"))
                loeschen();
            if (e.getActionCommand().equals("aktualisieren"))
                aktualisieren();
        }
    }
   
    //die innere Klasse für die Fensterereignisse
    class FensterListener extends WindowAdapter {
        @Override
        public void windowClosing(WindowEvent e) {
            super.windowClosing(e);
            //die Datenbankverbindung trennen
            //ergebnisMenge und verbindung sind Variablen der äußeren Klasse
            try {
                BearbeitenEintrag.this.ergebnisMenge.close();
                BearbeitenEintrag.this.verbindung.close();
                MiniDBTools.schliessenDB("jdbc:derby:");
            }
            catch(Exception exc) {
                JOptionPane.showMessageDialog(null, "Problem: \n" + exc.toString());
            }
        }
    }
   
    //der Konstruktor der Klasse BearbeitenEintrag
    public BearbeitenEintrag(JFrame parent, boolean modal) {
        super(parent, modal);
        setTitle("Einträge bearbeiten");
       
        //wir nehmen ein Borderlayout
        setLayout(new BorderLayout());
        //die Aktionen erstellen
        loeschenAct = new MeineAktionen("Datensatz löschen",
                new ImageIcon("icons/Delete24.gif"),
                "Löscht den aktuellen Datensatz",
                null,
                "loeschen");
        vorAct = new MeineAktionen("Einen Datensatz weiter",
                new ImageIcon("icons/Forward24.gif"),
                "Blättert einen Datensatz weiter",
                null,
                "einenvor");
        zurueckAct = new MeineAktionen("Einen Datensatz zurück",
                new ImageIcon("icons/Back24.gif"),
                "Blättert einen Datensatz zurück",
                null,
                "einenzurueck");
        startAct = new MeineAktionen("Zum ersten Datensatz",
                new ImageIcon("icons/Front24.gif"),
                "Geht zum ersten Datensatz",
                null,
                "vor");
        endeAct = new MeineAktionen("Zum letzten Datensatz",
                new ImageIcon("icons/End24.gif"),
                "Geht zum letzten Datensatz",
                null,
                "zurueck");
        aktualisierenAct = new MeineAktionen("Änderungen speichern",
                new ImageIcon("icons/Save24.gif"),
                "Speichert Änderungen am aktuellen Datensatz",
                null,
                "aktualisieren");
       
        //die Symbolleiste oben einfügen
        add(symbolleiste(), BorderLayout.NORTH);

        //die Oberfläche erstellen und einfügen
        add(initGui(), BorderLayout.CENTER);
       
        //zuerst nehmen wir alle Einträge aus der Tabelle adressen
        sqlAbfrage = "SELECT * FROM adressen";
       
        //diese Abfrage wählt nur alle Müllers aus
        //sqlAbfrage = "SELECT * FROM adressen WHERE nachname = 'Müller'";
       
        //die Datenbankverbindung herstellen
        initDB();
       
        //es werden die zeilen der datenbank gezählt.........Einsendeaufgabe nummer1
        rowcount();
        //die Verbindung mit dem Listener des Fensters herstellen
        addWindowListener(new FensterListener());
       
        //packen und anzeigen
        pack();
        setVisible(true);
        //Standardoperation setzen
        //hier den Dialog ausblenden und löschen
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }
   
    //fügt die Felder in ein Panel ein und liefert das Panel zurück
    private JPanel initGui() {
        JPanel tempPanel = new JPanel();
        //im GridLayout mit zwei Spalten
        tempPanel.setLayout(new GridLayout(0, 2));
        //für die Nummer (nur Anzeige)
        tempPanel.add(new JLabel("ID-Nummer:"));
        nummer = new JLabel();
        tempPanel.add(nummer);
        //für die anderen Felder
        tempPanel.add(new JLabel("Vorname:"));
        name = new JTextField();
        tempPanel.add(name);
        tempPanel.add(new JLabel("Nachname:"));
        nachname = new JTextField();
        tempPanel.add(nachname);
        tempPanel.add(new JLabel("Strasse:"));
        strasse = new JTextField();
        tempPanel.add(strasse);
        tempPanel.add(new JLabel("PLZ:"));
        plz = new JTextField();
        tempPanel.add(plz);
        tempPanel.add(new JLabel("Ort:"));
        ort = new JTextField();
        tempPanel.add(ort);
        tempPanel.add(new JLabel("Telefon:"));
        telefon = new JTextField();
        tempPanel.add(telefon);
        //.................................................Einsendeaufgabe nummer 1
        tempPanel.add(new JLabel("Datensatz:"));
        datensatz = new JLabel();
        tempPanel.add(datensatz);
        //zurückgeben
        return tempPanel;
    }
   
    //die Symbolleiste erzeugen und zurückgeben
    private JToolBar symbolleiste() {
        JToolBar leiste = new JToolBar();
        //die Symbole über die Aktionen einbauen
        leiste.add(loeschenAct);
        leiste.add(aktualisierenAct);
        //Abstand einbauen
        leiste.addSeparator();
        leiste.add(startAct);
        leiste.add(zurueckAct);
        leiste.add(vorAct);
        leiste.add(endeAct);
       
        //die komplette Leiste zurückgeben
        return (leiste);
    }
   
    //die Verbindung zur Datenbank herstellen
    private void initDB() {
        try{
            //Verbindung herstellen und Ergebnismenge beschaffen
            verbindung=MiniDBTools.oeffnenDB("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:adressenDB");
            ergebnisMenge = MiniDBTools.liefereErgebnis(verbindung, sqlAbfrage);
            // rowCount vor Verwendung füllen--------Einsendeaufgabe nummer 1
                        ergebnisMenge.last();
                         rowCount = ergebnisMenge.getRow();
                        ergebnisMenge.beforeFirst();
            if (ergebnisMenge.next())
                datenLesen();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }

    //die Methode liest die Daten und schreibt sie in die Felder
    private void datenLesen() {
        try {
            nummer.setText(Integer.toString(ergebnisMenge.getInt(1)));
            name.setText(ergebnisMenge.getString(2));
            nachname.setText(ergebnisMenge.getString(3));
            strasse.setText(ergebnisMenge.getString(4));
            plz.setText(ergebnisMenge.getString(5));
            ort.setText(ergebnisMenge.getString(6));
            telefon.setText(ergebnisMenge.getString(7));
           
            // Hier wird rowCount verwendet!...Einsendeaufgabe nummer1
            datensatz.setText(ergebnisMenge.getRow()+"/"+ rowCount);
            rowCount++;
            // Ergänzung zum ermitteln der Datensätze und zum Anzeigen in der Gui
            ergebnisMenge.getRow();
                   
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }
   
        //diese methode zählt die reihen und setzt den zeiger wieder auf anfang.....Einsendeaufgabe nummer 1
        private void rowcount() {
           
            try {
                ergebnisMenge.last();
                rowCount =  ergebnisMenge.getRow();
                ergebnisMenge.beforeFirst();
            }
            catch(Exception e) {
                JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
            }
           
        }

    //die Methode geht zum ersten Datensatz
    private void ganzVor() {
        try {
       
            //gibt es noch einen Datensatz?
            //ist das Ende erreicht?
            //........................................Einsendeaufgabenummer2
            if (ergebnisMenge.isLast() == false)
            if (ergebnisMenge.next())
            datenLesen();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }

    //die Methode geht zum letzten Datensatz
    private void ganzZurueck() {
        try {
            //ganz nach hinten gehen
            ergebnisMenge.last();
            datenLesen();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
}

    //die Methode geht einen Datensatz weiter
    private void einenVor() {
        try {
            //gibt es noch einen Datensatz?
            if (ergebnisMenge.next())
                datenLesen();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }
   
    //die Methode geht einen Datensatz zurück
    private void einenZurueck() {
        try{
            //gibt es noch einen Datensatz davor?.........Einsendeaufgabe nummer2
            if (ergebnisMenge.isFirst() == false)
            if (ergebnisMenge.previous())
                datenLesen();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }
   
    //die Methode löscht einen Datensatz
    private void loeschen() {
        try {
            //wir müssen uns merken, wo wir sind
            int position;
            position = ergebnisMenge.getRow();
           
            //den Eintrag löschen
            ergebnisMenge.deleteRow();
            //Ergebnismenge schließen
            ergebnisMenge.close();
            // und neu öffnen
            ergebnisMenge = MiniDBTools.liefereErgebnis(verbindung, sqlAbfrage);
           
            //und wieder zur "alten" Position gehen
            ergebnisMenge.absolute(position);
            //stehen wir jetzt hinter dem letzten?
            if (ergebnisMenge.isAfterLast())
                //dann zum letzten gehen
                ergebnisMenge.last();
            //die Daten neu lesen
            datenLesen();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }

    //die Methode aktualisiert einen Eintrag
    private void aktualisieren() {
        try {
            //wir müssen uns merken, wo wir sind
            int position;
            position = ergebnisMenge.getRow();
           
            //die Daten aktualisieren
            ergebnisMenge.updateString(2, name.getText());
            ergebnisMenge.updateString(3, nachname.getText());
            ergebnisMenge.updateString(4, strasse.getText());
            ergebnisMenge.updateString(5, plz.getText());
            ergebnisMenge.updateString(6, ort.getText());
            ergebnisMenge.updateString(7, telefon.getText());
       
     
            //den Datensatz aktualisieren
            ergebnisMenge.updateRow();
            //Ergebnismenge schließen
            ergebnisMenge.close();
            // und neu öffnen
            ergebnisMenge = MiniDBTools.liefereErgebnis(verbindung, sqlAbfrage);
            //und wieder zur "alten" Position gehen
            ergebnisMenge.absolute(position);
            //die Daten neu lesen
            datenLesen();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }
}
Die Leiste zur Anzeige der Datensatznummer (unten am Mauszeiger)
Lassen Sie die Anzeige in der Leiste beim Navigieren und beim Löschen aktualisieren. Denken Sie beim Löschen daran, dass sich auch die Gesamtzahl verändert.

Ich habe den Code geschrieben funtioniert alles, ausser am anfang bei dem Datensatz zeigt er 1von 0 und soll 1 von 14 zeigen, ich sollte glaubich rowCount--; irgendwo schreiben aber ich habe nicht geschaft. Könnte jemand mir helfen
Danke im Voraus
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I API Key´s in der Datenbank decrypt / encrypten? Java Basics - Anfänger-Themen 23
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
M Von der Datenbank zum Textfield Java Basics - Anfänger-Themen 16
R Best Practice Logik in der Datenbank oder in Java? Java Basics - Anfänger-Themen 3
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
B Datenbank: Entity mit vielen Referenzen? Ansatz so ok? Java Basics - Anfänger-Themen 8
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Datenbank verbindung Java Basics - Anfänger-Themen 19
J Java Verbindung mit mysql Datenbank Java Basics - Anfänger-Themen 3
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
R Input/Output Verbindung mit mySql-Datenbank Java Basics - Anfänger-Themen 9
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
J Mit JSF Formular in Datenbank schreiben Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Verschiede Aktionen der Datenbank getrennt durchführen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Datenbank wird nicht erstellt Java Basics - Anfänger-Themen 31
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
Meeresgott OOP Gui, Logik und Datenbank richtig aufbauen Java Basics - Anfänger-Themen 43
B Schreiben von zu vielen Einträgen in einer Datenbank Java Basics - Anfänger-Themen 9
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
M Java als Webanwendung mit Datenbank abfrage Java Basics - Anfänger-Themen 3
N Datenbank mit GUI verbinden - Wie? Java Basics - Anfänger-Themen 5
1 Datenbank in Java Java Basics - Anfänger-Themen 1
M Erste Schritte Java Applet - HTML Seiten auslesen und in Access Datenbank schreiben? Java Basics - Anfänger-Themen 15
J Bücher Datenbank Java Basics - Anfänger-Themen 5
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24
J Datum und Uhrzeit in Datenbank falsch hinterlegt Java Basics - Anfänger-Themen 13
R Erstversuch Datenbank Java Basics - Anfänger-Themen 6
I Daten speichern ohne Datenbank Java Basics - Anfänger-Themen 20
A Erste Schritte Verbindung zu MySQL Datenbank herstellen Java Basics - Anfänger-Themen 7
T Sql Datenbank - variable übergeben? Java Basics - Anfänger-Themen 8
C Passwörter möglichst sicher in Datenbank speichern Java Basics - Anfänger-Themen 18
W Erste Schritte Exceltabelle in Datenbank übertragen mittels XDEV Java Basics - Anfänger-Themen 7
J GUI mit phpMyAdmin Datenbank verbinden Java Basics - Anfänger-Themen 0
K Erste Schritte Datenbank SQL erklärung Java Basics - Anfänger-Themen 15
B Lokale Datenbank Java Java Basics - Anfänger-Themen 2
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
Todesbote Int Array mit Hibernate in Datenbank speichern. Java Basics - Anfänger-Themen 2
U Datenbank in Java Java Basics - Anfänger-Themen 8
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
N mit Werten aus einer mysql datenbank in java rechnen Java Basics - Anfänger-Themen 17
Q Datenbank nicht über separaten Server Java Basics - Anfänger-Themen 4
B Dateiname in Datenbank schreiben Java Basics - Anfänger-Themen 2
J fortlaufende Objekte durch Variable auswählen; Datenbank Java Basics - Anfänger-Themen 4
S ArrayList in mysql Datenbank speichern Java Basics - Anfänger-Themen 6
C Datenbank - Welche Java Basics - Anfänger-Themen 5
B Java Objektorientierte Datenbank - Assoziation Hilfe Java Basics - Anfänger-Themen 4
G Input/Output Serialisierung oder Datenbank Java Basics - Anfänger-Themen 6
J Erste Schritte Objekte in Datenbank speichern Java Basics - Anfänger-Themen 26
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
L Erste Schritte Datenbank Zugangsdaten sicher? Java Basics - Anfänger-Themen 15
S Input/Output Primzahlen Datenbank Java Basics - Anfänger-Themen 11
B Mit Java-Programm Daten aus MySQL-Datenbank auslesen, lokal und nicht lokal. Java Basics - Anfänger-Themen 10
K Input/Output Datenbank Java Basics - Anfänger-Themen 27
M Datenbank in die Gui Java Basics - Anfänger-Themen 4
J JTable mit Daten aus Datenbank füllen Java Basics - Anfänger-Themen 3
F Erfassung von PCs in eine SQLite-Datenbank über JDBC Java Basics - Anfänger-Themen 9
T Datenbank Abfrage Exception Null Java Basics - Anfänger-Themen 2
M Brauche ich ein Datenbank oder nicht? Java Basics - Anfänger-Themen 6
D JDBC Datenbank fail?! Java Basics - Anfänger-Themen 20
A Problem beim einfügen in eine Datenbank Java Basics - Anfänger-Themen 2
F Classpath Datenbank ... nur wo? Java Basics - Anfänger-Themen 24
H Datenbank suche in kleine Schritte Java Basics - Anfänger-Themen 6
B Personalnummer aus Datenbank Java Basics - Anfänger-Themen 3
M Welche Datenbank? Java Basics - Anfänger-Themen 5
J RadioButtonInhalt in Datenbank übergeben Java Basics - Anfänger-Themen 3
R Datenbank bei Klassenverteilung führt zu NullPointerException Java Basics - Anfänger-Themen 7
J PW von Datenbank wie abspeichern? Java Basics - Anfänger-Themen 2
F Verbindung zu MySql Datenbank Java Basics - Anfänger-Themen 4
MU5T4NG JPasswordField als Hash in Datenbank abspeichern Java Basics - Anfänger-Themen 3
J Kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
F Collections Datenbankdaten in einer Map speichern, bearbeiten, sortieren und wieder in Datenbank schreiben Java Basics - Anfänger-Themen 20
T Zugangsdaten für Datenbank in Java-Programm speichern? Java Basics - Anfänger-Themen 5
S Schnittstelle für Datenbank bzw. Dateiformat Java Basics - Anfänger-Themen 2
C ComboBoxModel mit Daten der Datenbank verändern Java Basics - Anfänger-Themen 2
T Datenbank automatisch erzeugen beim ersten Start Java Basics - Anfänger-Themen 6
I Datenbank - nach erster Verbindung keine Verbindung mehr Java Basics - Anfänger-Themen 3
F Datenbank in eine Textdatei speichern Java Basics - Anfänger-Themen 13
C Java programm mit Datenbank für Anfänger Java Basics - Anfänger-Themen 21
S Datentypen supersimple Datenbank Java Basics - Anfänger-Themen 16
D Java mit Mysql Datenbank angebunden Java Basics - Anfänger-Themen 5
B "Datenbank" Java Basics - Anfänger-Themen 5
M datenbank java Java Basics - Anfänger-Themen 10
S JRadioButton - Wert setzen aus Datenbank Java Basics - Anfänger-Themen 4
D Countdown Funktion aus SQl Datenbank Java Basics - Anfänger-Themen 21
S von HTML-Form zum Datenbank Java Basics - Anfänger-Themen 8
M Problem: JSP für Zugriff auf Oracle-Server/Datenbank - sinnvoll? Java Basics - Anfänger-Themen 35

Ähnliche Java Themen

Neue Themen


Oben