Frameübergreifend in Datenbank eingeloggt bleiben

schina02

Mitglied
Hallo Leute!

Folgende Situation:

1. Frame, der sich öffnet: Anmeldebildschirm Username eingeben, Passwort eingeben + Button Login
Ich bin also mit der Datenbank verbunden, wenn ich alles richtig eingeben habe.

Wenn nun auf den nächsten Button geklickt wird, öffnet sich ein nächstes Fenster, wo Daten aus der Datenbank angezeigt werden sollen.

Leider zeigt er die Daten nicht an, weil er sozusagen vergessen hat, dass er schon angemeldet ist.


Wie bekomme ich es also hin, dass er beim Öffnen vom nächsten Fenster auch noch eingeloggt ist?

Das ist mein LogIn Fenster:
Java:
package proimmocheck;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;

public class frmLogin extends JFrame {

    static MysqlDataSource mds = new MysqlDataSource();
    static Connection con = null;
    static Statement stm = null;
    static ResultSet rs = null;
    static String sql = null;

    private BorderLayout layoutMain = new BorderLayout();
    private JPanel panelCenter = new JPanel();
    private JMenuBar menuBar = new JMenuBar();
    private JMenu menuFile = new JMenu();
    private JMenuItem menuFileExit = new JMenuItem();
    private JMenu menuHelp = new JMenu();
    private JMenuItem menuHelpAbout = new JMenuItem();
    private JLabel statusBar = new JLabel();
    private JToolBar toolBar = new JToolBar();
    private JButton buttonOpen = new JButton();
    private JButton buttonClose = new JButton();
    private JButton buttonHelp = new JButton();
    private ImageIcon imageOpen = new ImageIcon(frmLogin.class.getResource("openfile.gif"));
    private ImageIcon imageClose = new ImageIcon(frmLogin.class.getResource("closefile.gif"));
    private ImageIcon imageHelp = new ImageIcon(frmLogin.class.getResource("help.gif"));
    private JTextField txtBenutzername = new JTextField();
    private JPasswordField pasPasswort = new JPasswordField();
    private JLabel lblBitteLogin = new JLabel();
    private JButton btnSuchen = new JButton();
    private JButton btnAdmin = new JButton();
    private JButton btnLogin = new JButton();

    public frmLogin() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.setJMenuBar(menuBar);
        this.getContentPane().setLayout(layoutMain);
        panelCenter.setLayout(null);
        this.setSize(new Dimension(400, 300));
        this.setTitle("ImmoCheck - LogIn");
        menuFile.setText("File");
        menuFileExit.setText("Exit");
        menuFileExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                fileExit_ActionPerformed(ae);
            }
        });
        menuHelp.setText("Help");
        menuHelpAbout.setText("About");
        menuHelpAbout.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                helpAbout_ActionPerformed(ae);
            }
        });
        statusBar.setText("");
        buttonOpen.setToolTipText("Open File");
        buttonOpen.setIcon(imageOpen);
        buttonClose.setToolTipText("Close File");
        buttonClose.setIcon(imageClose);
        buttonHelp.setToolTipText("About");
        buttonHelp.setIcon(imageHelp);
        txtBenutzername.setBounds(new Rectangle(5, 35, 150, 40));
        txtBenutzername.setBorder(BorderFactory.createTitledBorder("Benutzername"));
        pasPasswort.setBounds(new Rectangle(160, 35, 130, 40));
        pasPasswort.setBorder(BorderFactory.createTitledBorder("Passwort"));
        lblBitteLogin.setText("Bitte geben Sie Ihre Logindaten ein.");
        lblBitteLogin.setBounds(new Rectangle(5, 15, 250, 15));
        btnSuchen.setText("Immobilie suchen");
        btnSuchen.setBounds(new Rectangle(50, 125, 145, 60));
        btnSuchen.setEnabled(false);
        btnSuchen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                btnSuchen_actionPerformed(e);
            }
        });
        btnAdmin.setText("Adminbereich");
        btnAdmin.setBounds(new Rectangle(220, 125, 150, 60));
        btnAdmin.setEnabled(false);
        btnAdmin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                btnAdmin_actionPerformed(e);
            }
        });
        btnLogin.setText("LogIn");
        btnLogin.setBounds(new Rectangle(310, 35, 65, 35));
        btnLogin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                btnLogin_actionPerformed(e);
            }
        });
        menuFile.add(menuFileExit);
        menuBar.add(menuFile);
        menuHelp.add(menuHelpAbout);
        menuBar.add(menuHelp);
        this.getContentPane().add(statusBar, BorderLayout.SOUTH);
        toolBar.add(buttonOpen);
        toolBar.add(buttonClose);
        toolBar.add(buttonHelp);
        this.getContentPane().add(toolBar, BorderLayout.NORTH);
        panelCenter.add(btnLogin, null);
        panelCenter.add(btnAdmin, null);
        panelCenter.add(btnSuchen, null);
        panelCenter.add(lblBitteLogin, null);
        panelCenter.add(pasPasswort, null);
        panelCenter.add(txtBenutzername, null);
        this.getContentPane().add(panelCenter, BorderLayout.CENTER);
        
        
    }
    
    
    
    private void Connect() {
        try {
            String sPass = pasPasswort.getText();
            String sUser = txtBenutzername.getText();
            if (sPass != null) {
                final String URL = "jdbc:mysql://localhost/immobilien";
                final String USER = sUser;
                final String PASSWORD = sPass;

                mds.setURL(URL);
                mds.setUser(USER);
                mds.setPassword(PASSWORD);
                con = mds.getConnection(USER, PASSWORD);

                stm = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                sql = "select id, art, ort, zimmer, lagebeschreibung, wohnflaeche, grundflaeche, preis from sortiment";
                stm.executeQuery(sql);
                rs = stm.getResultSet();
            }
            if ((rs != null) && (rs.next()) && (con != null)) {
                JOptionPane.showMessageDialog(null, "Sie sind nun mit der Datenbank verbunden.");
                txtBenutzername.setText("");
                pasPasswort.setText("");
                btnLogin.setEnabled(false);
                btnSuchen.setEnabled(true);
                btnAdmin.setEnabled(true);
            }
            
        }

        catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Sie haben das falsche Passwort eingegeben. Bitte versuchen Sie es erneut!");
            txtBenutzername.setText("");
            pasPasswort.setText("");
        }
    }
    

    void fileExit_ActionPerformed(ActionEvent e) {
        System.exit(0);
    }

    void helpAbout_ActionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(this, new frmLogin_AboutBoxPanel1(), "About", JOptionPane.PLAIN_MESSAGE);
    }



    private void btnAdmin_actionPerformed(ActionEvent e) {

        frmChange openImmoCheck = new frmChange();
        openImmoCheck.setLocation(300, 200);
        openImmoCheck.setVisible(true);

    }

    private void btnLogin_actionPerformed(ActionEvent e) {
        Connect();
        
    }
}
 
Zuletzt bearbeitet von einem Moderator:
das 1. Frame oder 2. ist nicht zu sehen, nicht erkennbar was wo passiert,
nichtmal ob der gepostete Code das 1. oder 2. Frame ist,
vermutlich ist es das 1. wegen des Login-Code, dann ist das zweite komplett unbekannt,
"ich schreibe eine Klasse x die was machen soll, aber ich sage nicht wie, ich poste nicht den Code, es geht einfach nicht"

der offensichtliche 'Trick' dürfte sein, das Verbindungsobjekt, vielleicht MysqlDataSource,
in beiden/ allen Programmteilen zu verwenden,
da das bei dir schon statisch ist, sollte es überall verfügbar sein,
muss das zweite Frame nur mds verwenden statt selber eine MysqlDataSource aufzumachen?
 
das zweite Fenster ist nicht unbekannt, ich dachte nur der Fehler liegt im Login Fenster.

im zweiten Fenster hab ich in der Main:
Java:
     MysqlDataSource mds;
    Connection con;
    Statement stm;
    ResultSet rs;
    String sql;

und dann in der jbinit:
Java:
        stm = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        sql = "select id, art, ort, zimmer, lagebeschreibung, wohnflaeche, grundflaeche, preis from sortiment";
        stm.executeQuery(sql);
        rs = stm.getResultSet();
 
wie kommst du auf con? von null zu con.createStatement() fehlt wohl was,

aber wie gesagt die statische MysqlDataSource der anderen Klasse benutzen?
 
also in dem 1. fenster so schreiben:

Java:
    static MysqlDataSource mds = new MysqlDataSource();
    static Connection con;
    static Statement stm;
    static ResultSet rs;
    static String sql;
 
also es ist am wichtigsten, dass diese beiden strings:

Java:
            String sPass = pasPasswort.getText();
            String sUser = txtBenutzername.getText();

in allen anderen frames verfügbar sind, wie mache ich das?
 
> also in dem 1. fenster so schreiben:

so steht es doch schon im 1. Fenster?
dort sorgst du anscheinend dafür dass mds ordentlich befüllt wird, das ist doch anscheinend dein Hauptanliegen,

ich sage nun dass du im 2. Fenster diese mds benutzen sollst, ist das so eine komplizierte Aussage?
statische Variablen, besonders wenn public, kann man von überall aus referenzieren, bekannt?

die Connection kannst du vielleicht auch gebrauchen, ist sonst aber wohl schnell neu erzeugt usw.

edit: mit den Strings genauso wenn nötig, dann eben erst noch statische Variablen einfügen,
die Alternative ist immer Übergabe im Konstruktor/ set-Methoden, vom 1. Fenster ins 2., oder was immer die Zwischenstufen sind
 
Zuletzt bearbeitet von einem Moderator:
edit: mit den Strings genauso wenn nötig, dann eben erst noch statische Variablen einfügen,
die Alternative ist immer Übergabe im Konstruktor/ set-Methoden, vom 1. Fenster ins 2., oder was immer die Zwischenstufen sind

kannst du mir da ein kleines beispiel im quellcode geben bitte?

ich glaube so geht es am einfachsten. dann gebe ich einfach das eingetippte passwort an das 2. fenster weiter
 
überall im Programm kannst du Klasse.statischeVariable schreiben, so wie System.out,
out ist eine statische Variable in der Klasse System

wo immer das zweite Fenster erzeugt wird, schreibst du statt
new ZweitesFenster()
jetzt
new ZweitesFenster(name, passwort, was auch immer);

mit entsprechend definierten Konstruktor,
und nein, weiter erkläre ich nicht jemanden, der mit komplizierten GUIs + Datenbanken um sich wirft, wie man auch noch einen Konstruktor schreibt..

auch wird vielleicht name + passwort an der rechten Stelle nicht vorhanden sein,
dann muss man sie eben irgendwo speichern, static will man dabei ja gerade vermeiden,
also vielleicht normale Instanzattribute, eine dritte Klasse muss die Daten vielleicht per getter abfragen usw.,
alles Grundlagen der aller ersten Klassen, was ist eine Variable, wie bekommt man sie von A nach B,
 

Zurück
Oben