Auf ein Objekt zurgreifen

Snickers0815

Mitglied
Hallo Leute,

ich habe folgendes Problem und stehe gerade auf dem Schlauch:

Zur kurzen Übersicht ich programmiere derzeit ein Anmeldevorgang mit Datenbankbezug. Jetzt möchte ich wenn sich ein User anmeldet, mir alle Daten von dem User aus der DB ziehen und ein neues UserObjekt mit den Daten aus der DB anlegen. Mein Problem ist, wenn ich jetzt von einer anderen Klasse versuche auf die Daten von meinem eingeloggten User zuzugreifen funktioniert dies nicht. Wahrscheinlich ein dummer Fehler..

Programmausschnitte:

Klasse UserLogin

initKundenObject(rs.getInt("KundenNR"), rs.getInt("PLZ"), rs.getString("Straße"), rs.getString("Stadt"), rs.getString("Vorname"), rs.getString("Nachname"), rs.getString("Username")); /*Hier hole ich mir die Daten aus der DB*/
****
private void initKundenObject(int kundenNR, int plz, String straße, String stadt, String vorname, String nachname, String username) {
kunde = new kunde(kundenNR, plz, straße, stadt, vorname, nachname);
kunde.setUsername(username);
}

Klasse KundenKontoinformation

username = kunde.getUsername();

Ich hoffe mein Problem kommt verständlich rüber.

Gruß,
Snickers
 

Robat

Top Contributor
Mein Problem ist, wenn ich jetzt von einer anderen Klasse versuche auf die Daten von meinem eingeloggten User zuzugreifen funktioniert dies nicht.
Was bedeutet: "funktioniert nicht"? Fliegt eine Exception? Wenn ja bitte Stacktrace + relevanten Code posten :)

username = kunde.getUsername();
Wie initialisierst du kunde?

PS:
Nächstes mal Code bitte in [code=Java]MY CODE[/code] posten

Gruß Robert :)
 

Snickers0815

Mitglied
Keine Exception, Username ist einfach leer. Habe auch getestet ob die Daten von der DB richtig übernommen werden, dass werden sie.

So habe ich Kunde in der Klasse KundenKontoinformation initalisiert:
Java:
private kunde kunde = new kunde();

Gruß Snickers :)
 

Robat

Top Contributor
Hab ich mir fast gedacht ;)

Der Grund warum dein Code nicht funktioniert ist folgender:

Du erstellst in deiner initKunde() Methode ein neues Kunden-Objekt und übergibst ihm die Daten. Damit hast du ein Objekt wo deine Daten korrekt drin stehen.
Nun erstellst du in der anderen Klasse ein neues Objekt [mit new kunde() ]. Damit sind aber auch die Daten neu d.h. es enthält nicht die Daten aus deinem ersten Kunden-Objekt.

Beispiel:
Java:
Kunde paul = new Kunde();
paul.setName("Paul");

Kunde marie = new Kunde();
marie.setName("Marie");

Selbes Beispiel wie bei dir. Du erstellst 2 Objekte - diese haben aber nicht den selben Inhalt :)

Gibt jetzt mehrere Möglichkeiten dein Objekt in deine KundenKontoinformation zu übergeben.
Mögliche Wegen wären über Getter / Setter, Methode in der UserLogin Klasse (deine init - Methode) die das User-Objekt zurückgibt, ..

Gruß Robert :)
 

Snickers0815

Mitglied
Also sollte es funktionieren, wenn ich in meiner KundenKontoinformation folgendes ändere:
Java:
 private kunde kunde;

und dann mit getter den Username mir hole?
Java:
username = kunde.getUsername();



Gruß Snickers
 

Robat

Top Contributor
Nein das wird dir eine NullPointerException (NPE) liefern, da du versuchst eine Methode auf eine Null-Referenz aufzurufen :)

Ich kenne - wie bereits gesagt - deine Projekt - und Klassenstruktur nicht aber eine Möglichkeit wäre es die Methode initUser() (die sicherlich in einer DB-Verwaltungsklasse liegt ?? ) public zu machen und als Return-Typ eine User-Instanz festzulegen. In deiner KundenKontoinformation Klasse kannst du dann eine Instanz deiner DB Klasse erstellen und dein User mittels Kunde kunde = db.initUser(...) initialisieren.

Minimalbeispiel:
Java:
public class Database
{
     public Database() {}

     public Kunde getKundeByName(String name)
     {  
                // ... Daten des Kunden mit dem übergebenen namen holen 
                alter = rs.get(..);
                strasse = rs.get(..);
                return new Kunde(name, alter, strasse);
     }   
}

public class KundenKontoInformation
{
     private Kunde kunde;
     private Database db;

     public KundenKontoInformation()
     {
           this.db = new Database();
           this.kunde = db.getKundeByName("Paul");
           String username = kunde.getUsername();
     }
}

PS: Solltest du es nicht hinbekommen dann schreib mal bitte deine Projektstruktur auf damit hier Lich ins dunkle kommt :p
 

Snickers0815

Mitglied
Hier mal meine zwei Klassen: (da ich mit GUI arbeite sind sie etwas länger, denke mal das macht dir abr nis as :D )

Java:
package ui;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import Core.*;
import com.mysql.jdbc.PreparedStatement;
import ui.Mitarbeiter.*;
import ui.Kunde.*;
import ui.Filialleiter.*;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;
import java.awt.event.ActionEvent;
import javax.swing.JPasswordField;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JCheckBox;
import javax.swing.JRadioButton;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;

public class UserLogin extends JFrame {

   private JPanel contentPane;
   private JTextField textFieldUsername;
   private JPasswordField passwordFieldPassword;
   private ButtonGroup bg = new ButtonGroup();
   private KundenMenue km = new KundenMenue();
   private FilialleiterMenue fm = new FilialleiterMenue();
   private MitarbeiterMenue mm = new MitarbeiterMenue();
   private KundenKontoinformation kki = new KundenKontoinformation();
   private Connection con = null;
   private kunde kunde = new kunde();
  
   /**
    * Launch the application.
    */
   public static void main(String[] args) {
       EventQueue.invokeLater(new Runnable() {
           public void run() {
               try {
                   UserLogin frame = new UserLogin();
                   frame.setVisible(true);
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
       });
   }

   /**
    * Create the frame.
    */
   public UserLogin() {
      
       //Verbindung zur DB
       con = connection.dbConnection();

       setTitle("Login");
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setBounds(100, 100, 450, 300);
       contentPane = new JPanel();
       contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
       setContentPane(contentPane);
       contentPane.setLayout(null);

       JLabel lblUsername = new JLabel("Username");
       lblUsername.setBounds(40, 45, 68, 14);
       contentPane.add(lblUsername);

       JLabel lblPassword = new JLabel("Password");
       lblPassword.setBounds(40, 110, 68, 14);
       contentPane.add(lblPassword);

       textFieldUsername = new JTextField();
       textFieldUsername.setBounds(118, 42, 86, 20);
       contentPane.add(textFieldUsername);
       textFieldUsername.setColumns(10);

       passwordFieldPassword = new JPasswordField();
       passwordFieldPassword.setBounds(118, 107, 86, 20);
       contentPane.add(passwordFieldPassword);

       JRadioButton rdbtnFilialleiter = new JRadioButton("Filialleiter");
       rdbtnFilialleiter.setBounds(273, 45, 109, 23);
       contentPane.add(rdbtnFilialleiter);
       bg.add(rdbtnFilialleiter);

       JRadioButton rdbtnMitarbeiter = new JRadioButton("Mitarbeiter");
       rdbtnMitarbeiter.setBounds(273, 90, 109, 23);
       contentPane.add(rdbtnMitarbeiter);
       bg.add(rdbtnMitarbeiter);

       JRadioButton rdbtnKunde = new JRadioButton("Kunde");
       rdbtnKunde.setBounds(273, 135, 109, 23);
       contentPane.add(rdbtnKunde);
       bg.add(rdbtnKunde);

       JButton btnLogin = new JButton("Login");
       btnLogin.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent arg0) {

               try {

                   String name = textFieldUsername.getText();
                   String pwd = passwordFieldPassword.getText();

                   if (rdbtnFilialleiter.isSelected()) {
                       String query = "select * from filialleiter where username=? and password=?";
                       PreparedStatement statement = (PreparedStatement) con.prepareStatement(query);
                       statement.setString(1, name);
                       statement.setString(2, pwd);

                       ResultSet rs = statement.executeQuery();
                       if (rs.next()) {

                           JOptionPane.showMessageDialog(null, "Login successful");

                           fm.setVisible(true);
                           setVisible(false);
                       } else {

                           JOptionPane.showMessageDialog(null, "Invalid Username or Password");
                       }
                   } else if (rdbtnMitarbeiter.isSelected()) {
                       String query = "select * from ansprechpartner where username=? and password=?";
                       PreparedStatement statement = (PreparedStatement) con.prepareStatement(query);
                       statement.setString(1, name);
                       statement.setString(2, pwd);

                       ResultSet rs = statement.executeQuery();
                       if (rs.next()) {

                           JOptionPane.showMessageDialog(null, "Login successful");

                           mm.setVisible(true);
                           setVisible(false);
                       } else {

                           JOptionPane.showMessageDialog(null, "Invalid Username or Password");
                       }
                   } else if (rdbtnKunde.isSelected()) {
                       String query = "select * from kunde where username=? and password=?";
                       PreparedStatement statement = (PreparedStatement) con.prepareStatement(query);
                       statement.setString(1, name);
                       statement.setString(2, pwd);

                       ResultSet rs = statement.executeQuery();
                       if (rs.next()) {
                                                      
                           initKundenObject(rs.getInt("KundenNR"), rs.getInt("PLZ"), rs.getString("Straße"), rs.getString("Stadt"), rs.getString("Vorname"), rs.getString("Nachname"), rs.getString("Username")); //hier übergeb ich die Daten aus meiner DB der Methode
                          
                           JOptionPane.showMessageDialog(null, "Login successful");

                           km.setVisible(true);
                           setVisible(false);

                       } else {

                           JOptionPane.showMessageDialog(null, "Invalid Username or Password");
                       }
                   } else {
                       JOptionPane.showMessageDialog(null, "Please select one option");
                   }

               } catch (SQLException e) {

                   e.printStackTrace();
               }
           }
       });
       btnLogin.setBounds(118, 188, 89, 23);
       contentPane.add(btnLogin);

   }
  
   /**
     * User Objekt erstellen
     *
     */
  
    private void initKundenObject(int kundenNR, int plz, String straße, String stadt, String vorname, String nachname, String username) {
        kunde = new kunde(kundenNR, plz, straße, stadt, vorname, nachname);
        kunde.setUsername(username);
          }
}

Java:
package ui.Kunde;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import com.mysql.jdbc.PreparedStatement;
import ui.*;
import ui.connection;
import Core.*;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JComboBox;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JTextPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class KundenKontoinformation extends JFrame {

   private JPanel contentPane;
   private JComboBox comboBoxKonto;
   private String username;
   private JLabel lblKontonr;
   private JTextField textFieldKontoNR;
   private JLabel lblKontostand;
   private JTextField textFieldKontostand;
   private JLabel lblZinssatz;
   private JTextField textFieldZinssatz;
   private JLabel lblLaufzeitende;
   private JTextField textFieldLaufzeitende;
   private JButton btnZurck;
   private Connection con = null;
   private kunde kunde;
   // private KundenMenue km = new KundenMenue();

   public String getUsername() {
       return this.username;
   }

   public void setUsername(String username) {
       this.username = username;
   }

   /**
    * Launch the application.
    */
   public static void main(String[] args) {
       EventQueue.invokeLater(new Runnable() {
           public void run() {
               try {
                   KundenKontoinformation frame = new KundenKontoinformation();
                   frame.setVisible(true);
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
       });
   }

   public void fillComboBox() {

       try {
           con = connection.dbConnection();
           username = kunde.getUsername();//Versuch den Usernamen des derzeit eingeloggten Users zu holen
           String query = "select * from kunde where username=?";
           PreparedStatement statement = (PreparedStatement) con.prepareStatement(query);
           statement.setString(1, username);
           ResultSet rs = statement.executeQuery();

           while (rs.next()) {
               if (rs.getBoolean("Sparkonto")) {
                   comboBoxKonto.addItem("Sparkonto");
               } else if (rs.getBoolean("Girokonto")) {
                   comboBoxKonto.addItem("Girokonto");
               } else if (rs.getBoolean("Festgeldkonto")) {
                   comboBoxKonto.addItem("Festgeldkonto");
               } else {
                   JOptionPane.showMessageDialog(null, "Kein Konto vorhanden");
               }

               JOptionPane.showMessageDialog(null, rs.getString("Vorname") + ", " + rs.getString("Nachname"));

           }
       } catch (Exception e) {
           e.printStackTrace();
       }
   }

   /**
    * Create the frame.
    */
   public KundenKontoinformation() {
      
       // Verbindung zur DB
       con = connection.dbConnection();
              
       setTitle("Kontoinformation");
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setBounds(100, 100, 450, 300);
       contentPane = new JPanel();
       contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
       setContentPane(contentPane);
       contentPane.setLayout(null);

       comboBoxKonto = new JComboBox();
       comboBoxKonto.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent arg0) {
               try {
                   String ausgewaehlteskonto = (String) comboBoxKonto.getSelectedItem();
                   String query = "select * from ?";
                   PreparedStatement statement = (PreparedStatement) con.prepareStatement(query);
                   statement.setString(1, ausgewaehlteskonto);
                   ResultSet rs = statement.executeQuery();

                   while (rs.next()) {

                       if (ausgewaehlteskonto.equals("Sparkonto")) {
                           textFieldKontoNR.setText(rs.getString("KontoNR"));
                           textFieldKontostand.setText(rs.getString("Kontostand"));
                           textFieldZinssatz.setText(rs.getString("Zinssatz"));
                           textFieldLaufzeitende.setEnabled(false);
                       } else if (ausgewaehlteskonto.equals("Girokonto")) {
                           textFieldKontoNR.setText(rs.getString("KontoNR"));
                           textFieldKontostand.setText(rs.getString("Kontostand"));
                           textFieldZinssatz.setEnabled(false);
                           textFieldLaufzeitende.setEnabled(false);
                       } else {
                           textFieldKontoNR.setText(rs.getString("KontoNR"));
                           textFieldKontostand.setText(rs.getString("Kontostand"));
                           textFieldZinssatz.setText(rs.getString("Zinssatz"));
                           textFieldLaufzeitende.setText(rs.getString("Ende"));
                       }

                   }
               } catch (Exception e) {
                   e.printStackTrace();
               }

           }
       });
       comboBoxKonto.setBounds(166, 11, 164, 20);
       contentPane.add(comboBoxKonto);

       JLabel lblKontoAuswhlen = new JLabel("Konto ausw\u00E4hlen:");
       lblKontoAuswhlen.setBounds(30, 14, 126, 14);
       contentPane.add(lblKontoAuswhlen);

       lblKontonr = new JLabel("KontoNR:");
       lblKontonr.setBounds(30, 92, 84, 14);
       contentPane.add(lblKontonr);

       textFieldKontoNR = new JTextField();
       textFieldKontoNR.setBounds(124, 89, 206, 20);
       contentPane.add(textFieldKontoNR);
       textFieldKontoNR.setColumns(10);

       lblKontostand = new JLabel("Kontostand:");
       lblKontostand.setBounds(30, 117, 84, 14);
       contentPane.add(lblKontostand);

       textFieldKontostand = new JTextField();
       textFieldKontostand.setBounds(124, 114, 206, 20);
       contentPane.add(textFieldKontostand);
       textFieldKontostand.setColumns(10);

       lblZinssatz = new JLabel("Zinssatz:");
       lblZinssatz.setBounds(30, 142, 84, 14);
       contentPane.add(lblZinssatz);

       textFieldZinssatz = new JTextField();
       textFieldZinssatz.setBounds(124, 139, 206, 20);
       contentPane.add(textFieldZinssatz);
       textFieldZinssatz.setColumns(10);

       lblLaufzeitende = new JLabel("Laufzeitende:");
       lblLaufzeitende.setBounds(30, 167, 84, 14);
       contentPane.add(lblLaufzeitende);

       textFieldLaufzeitende = new JTextField();
       textFieldLaufzeitende.setBounds(124, 164, 206, 20);
       contentPane.add(textFieldLaufzeitende);
       textFieldLaufzeitende.setColumns(10);

       btnZurck = new JButton("Zur\u00FCck");
       // btnZurck.addActionListener(new ActionListener() {
       // public void actionPerformed(ActionEvent arg0) {
       //
       // km.setVisible(true);
       // setVisible(false);
       // }
       // });
       btnZurck.setBounds(335, 228, 89, 23);
       contentPane.add(btnZurck);

       fillComboBox();
   }
}
 
Zuletzt bearbeitet von einem Moderator:

Snickers0815

Mitglied
Ich wollte noch ein Bild von meinem Projekt mit Packages hochladen, da gab es aber einen Error :D

Deshalb versuche ich es mal so aufzuschreiben (Ausschnitt):

Projekt: Schulprojekt

  • Package: Core
    • Klasse: kunde
  • Package: ui
    • Klasse: UserLogin
  • Package: ui.Kunde
    • Klasse: KundenKontoinformation
 

Snickers0815

Mitglied
Ich habe jetzt folgendes versucht, bringt mir aber wieder eine NPE.

Klasse LoginUser

Java:
kki.setKunde(initKundenObject(rs.getInt("KundenNR"), rs.getInt("PLZ"), rs.getString("Straße"), rs.getString("Stadt"), rs.getString("Vorname"), rs.getString("Nachname"), rs.getString("Username")));

 public kunde initKundenObject(int kundenNR, int plz, String straße, String stadt, String vorname, String nachname, String username) {
        kunde = new kunde(kundenNR, plz, straße, stadt, vorname, nachname);
        kunde.setUsername(username);
        return kunde;
    }

Klasse Kundenkontoinformation

Java:
public void setKunde(kunde kunde){
       this.kunde = kunde;
   }

username = kunde.getUsername();

Habe gedacht, so könnte ich das erzeugte Kunden Objekt übergeben, aber ist wohl kein Unterschied zu vorher... :/
 

Joose

Top Contributor
So wie du es gerade probiert hast ist grundsätzlich schon richtig. Das Problem ist aber dass du den Usernamen abfragen willst bevor du den Kunden setzt!
Warum? Weil deine Methode fillComboBox vom Konstruktor der Klasse KundenKontoInformation aufgerufen wird.
In deiner Klasse UserLogin instanzierst du ein KundenKontoInformation Objekt (somit wird "fillComboBox" aufgerufen bevor du einen Kunden setzt).

Mögliche Lösung: Du setzt den Kunden über den Konstruktor der Klasse KundenKontoInformation, dann darfst du diese Klasse aber erst instanzieren wenn du sie brauchst und einen entsprechenden Kunden übergeben kannst.
 

Snickers0815

Mitglied
Heißt das ich muss meinen Code wie folgt abändern?

Klasse LoginUser

Java:
private Kundenkontoinformation kki;

.....
kki = new kki(initKundenObject(rs.getInt("KundenNR"), rs.getInt("PLZ"), rs.getString("Straße"), rs.getString("Stadt"), rs.getString("Vorname"), rs.getString("Nachname"), rs.getString("Username")));
.....

Klasse Kundenkontoinformation

Java:
public KundenKontoinformation (kunde kunde){

   this.kunde = kunde;
   .
   .
   .
}
 

Snickers0815

Mitglied
Da ich meinen Konsturktor geändert habe bekomme ich jetzt in meiner Main Methode einen Fehler (The constructor KundenKontoinformation() is undefined).

Jetzt wollte ich meinen Konstruktoraufruf wie folgt abändern:

Java:
public static void main(String[] args) {
       EventQueue.invokeLater(new Runnable() {
           public void run() {
               try {
                   KundenKontoinformation frame = new KundenKontoinformation(kunde);
                   frame.setVisible(true);
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
       });
   }

bekomme aber folgende Fehlermeldung: Cannot make a static reference to the non-static field kunde.

Muss ich jetzt einfach nur mein

Java:
private kunde kunde;  -> private static kunde kunde;

ändern?
Ich habe mir bestimmt schon hundertmal durchgelesen was static macht, aber nie richtig verstanden. Beeinflusst das mein kunden Objekt irgendwie?
 

Joose

Top Contributor
Wozu brauchst du diese main Methode? Um ein die Klasse "KundenKontoInformation" zu testen?
Wenn es nur zum testen der Klasse ist dann erstellt lokal in der main-Methode eine Dummy Kunden Objekt mit von dir gewählten Werten.

Nein das Attribut statisch zu machen ist falsch. So würde jede Instanz der Klasse "KundenKontoInformation" auf das selbe Kundenobjekt zugreifen.
 

Snickers0815

Mitglied
Alles klar ich kann die Main Methode weglassen. :D

Vielen Dank schon mal für eure Hilfe bisher!!!

Jetzt habe ich noch eine Frage: Ich habe noch weitere Klassen (KundenMenue und KundenUeberweisung), wo ich ein Objekt der Klasse Kundenkontoinformation anlege. Habe diese wie folgt inizialisiert:

Java:
private kunde kunde = new kunde();
   private KundenKontoinformation kontoinformation = new KundenKontoinformation(kunde);

Ist das so richtig? Habe mein Programm getestet und es scheint den Usernamen jetzt richtig zu übernehmen. Bin mir nur nicht ganz sicher, weil ich einen neuen Error bekomme, der in meinen Augen aber durch was anderes ausgelöst wird (leider weiß ich nicht wirklich wodurch).

Hier mal mein neuer Error:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''Sparkonto'' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2834)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2313)
at ui.Kunde.KundenKontoinformation$1.actionPerformed(KundenKontoinformation.java:124)
at javax.swing.JComboBox.fireActionEvent(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.DefaultComboBoxModel.addElement(Unknown Source)
at javax.swing.JComboBox.addItem(Unknown Source)
at ui.Kunde.KundenKontoinformation.fillComboBox(KundenKontoinformation.java:81)
at ui.Kunde.KundenKontoinformation.<init>(KundenKontoinformation.java:206)
at ui.UserLogin$2.actionPerformed(UserLogin.java:162)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Der Fehler müsste sich auf meine Klasse Kundenkontoinformation beziehen. Laut der Beschreibung muss ja ein Fehler bei der Syntax von Sparkonto sein. Jedoch kann ich da nichts falsches erkennen...

Gruß Snickers
 

JStein52

Top Contributor
Dein Fehler scheint hier drin zu sein In der actionPerformed):
Code:
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2313)
at ui.Kunde.KundenKontoinformation$1.actionPerformed(KundenKontoinformation.java:124)
und zwar in dem sql-Statement das da aufgebaut wird. Und in dem sql-Statement kommt wohl ein Tabellennamen oder Spaltennamen "Sparkonto" vor.
 

Snickers0815

Mitglied
Ich finde keinen Fehler in meiner SQL Syntax. Der Fehler müsste sich auf folgenden Teil beziehen:

Java:
comboBoxKonto = new JComboBox();
       comboBoxKonto.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent arg0) {
               try {
                   String ausgewaehlteskonto = (String) comboBoxKonto.getSelectedItem();
                   String query = "select * from ?";
                   PreparedStatement statement = (PreparedStatement) con.prepareStatement(query);
                   statement.setString(1, ausgewaehlteskonto);
                   ResultSet rs = statement.executeQuery();

                   while (rs.next()) {

                       if (ausgewaehlteskonto.equals("Sparkonto")) {
                           textFieldKontoNR.setText(rs.getString("KontoNR"));
                           textFieldKontostand.setText(rs.getString("Kontostand"));
                           textFieldZinssatz.setText(rs.getString("Zinssatz"));
                           textFieldLaufzeitende.setEnabled(false);
                       } else if (ausgewaehlteskonto.equals("Girokonto")) {
                           textFieldKontoNR.setText(rs.getString("KontoNR"));
                           textFieldKontostand.setText(rs.getString("Kontostand"));
                           textFieldZinssatz.setEnabled(false);
                           textFieldLaufzeitende.setEnabled(false);
                       } else if(ausgewaehlteskonto.equals("Festgeldkonto")){
                           textFieldKontoNR.setText(rs.getString("KontoNR"));
                           textFieldKontostand.setText(rs.getString("Kontostand"));
                           textFieldZinssatz.setText(rs.getString("Zinssatz"));
                           textFieldLaufzeitende.setText(rs.getString("Ende"));
                       }else{
                           JOptionPane.showMessageDialog(null, "Bitte ein Konto auswählen");
                       }

                   }
               } catch (Exception e) {
                   e.printStackTrace();
               }

           }
       });

Vielleicht bin ich nur blind und einer von euch sieht den Fehler auf anhieb. Ich habe auch noch einmal überprüft ob ich Sparkonto richtig geschrieben habe. Das habe ich. In meiner DB ist Sparkonto auch genauso geschrieben und wenn ich den SQL Befehl (select * from Sparkonto) ausführe wird mir auch alles ganz normal ausgegeben.

Gruß Snickers
 

stg

Top Contributor
Wo hast du denn die Info her, dass du den Platzhalter auf diese Weise verwenden darfst? Du benutzt PreparedStatement hier schlicht falsch...
Salopp: Die Parameter sind nur für Spalten-Werte, nicht für Tabellennamen oder sonst was.
 

JStein52

Top Contributor
Ich glaube Claus braucht noch einen Kaffee :):) Aber hast du dir das mal angeschaut was da genau von deiner Combo-Box zurückkommt ? Sind da aus versehen noch andere Zeichen drin als nur "Sparkonto"?
Codiere das Statement doch mal hart als select * from Sparkonto und guck ob es dann geht
 

Snickers0815

Mitglied
Sorry. Habe mir das alles mehr oder weniger mithilfe von tutorials etc. selbst beigebracht. Da meine Lehrer in der Schule keine wirkliche Hilfe sind.

Wollte es jetzt so lösen:

Java:
kundenNR = kunde.getKundenNR();
                   String ausgewaehlteskonto = (String) comboBoxKonto.getSelectedItem();
                   String query = "select * from "+ausgewaehlteskonto+" where KundenNR="+kundenNR;
                   PreparedStatement statement = (PreparedStatement) con.prepareStatement(query);

Meine ComboBox ist jedoch leer. Habe ich bei der Methode auch die PreparedStatements falsch benutzt?

Java:
    public void fillComboBox() {

       try {
           con = connection.dbConnection();
           username = kunde.getUsername();
           String query = "select * from kunde where username=?";
           PreparedStatement statement = (PreparedStatement) con.prepareStatement(query);
           statement.setString(1, username);
           ResultSet rs = statement.executeQuery();

           while (rs.next()) {
               if (rs.getBoolean("Sparkonto")) {
                   comboBoxKonto.addItem("Sparkonto");
               } else if (rs.getBoolean("Girokonto")) {
                   comboBoxKonto.addItem("Girokonto");
               } else if (rs.getBoolean("Festgeldkonto")) {
                   comboBoxKonto.addItem("Festgeldkonto");
               } else {
                   JOptionPane.showMessageDialog(null, "Kein Konto vorhanden");
               }

               JOptionPane.showMessageDialog(null, rs.getString("Vorname") + ", " + rs.getString("Nachname"));//Zum testen ob der Username richtig übergeben wird

           }
       } catch (Exception e) {
           e.printStackTrace();
       }
   }



Vielen Dank an dieser Stelle schon mal für euere Hifle und Geduld bei so Fragen/Problemen.
 

Thallius

Top Contributor
Ich glaube Claus braucht noch einen Kaffee :):)

Nein brauche ich nicht ;)

Code:
if (ausgewaehlteskonto.equals("Sparkonto"))........
                       }else{
                           JOptionPane.showMessageDialog(null, "Bitte ein Konto auswählen");
                       }

Klar war das etwas provokant aber laut der If Abfrage kann ausgewaehlteskonto wohl auch vollkommen undefinierte Werte annehmen. Was dann zu jedem beliebigen Query führen klann.

Gruß

Claus
 

Thallius

Top Contributor
Wo hast du denn die Info her, dass du den Platzhalter auf diese Weise verwenden darfst? Du benutzt PreparedStatement hier schlicht falsch...
Salopp: Die Parameter sind nur für Spalten-Werte, nicht für Tabellennamen oder sonst was.

Ist das echt so? Habe das noch nie ausprobiert aber macht doch eigentlich keinen Sinn da preparedStatement doch im Prinzip nur ein paar StringReplaces machen sollte oder nicht?

Gruß

Claus
 

Snickers0815

Mitglied
Kann es sein das meine ComboBox nicht mit Items gefüllt wird, weil ich .addItem() benutze und ein String übergebe?

Java:
if (rs.getBoolean("Sparkonto")) {
                   comboBoxKonto.addItem("Sparkonto");

Meine if Abfrage müsste doch stimmen oder? In meiner DB ist Sparkonto als boolean in meiner Tabelle Kunde angelegt.
 

Thallius

Top Contributor
Lass Dir die Werte doch einfach mal mit System.out.println() ausgeben. Dann weist du es. Was soll denn das ganze rumgerate?
 

Snickers0815

Mitglied
Ich habe es getestet. Meine if Abfragen liefern alle die richtigen Ergebnisse. Meiner ComboBox wird aber kein neues Item hinzugefügt.

Kann ich meiner ComboBox nicht mit der Methode .addItem() ein neues Item hinzufügen?
 

stg

Top Contributor
da preparedStatement doch im Prinzip nur ein paar StringReplaces machen sollte oder nicht?

Nein, Prepared Statement sind viel mehr als das. Es werden Statements (samt eventueller Platzhalter) an das DBMS übergeben, dort vorab optimiert usw. Im Grunde alles, was mit normalen Querys auch geschieht, nur werden sie nicht ausgeführt. Die Statements liegen anschließend vorübersetzt im DBMS vor und müssen dort nur noch mit Werten gefüllt und ausgeführt werden. Übersichtlicherer Code beim Client und das Vermeiden von SQL Injections sind eigentlich nicht mehr als ein angenehmer Nebeneffekt.
 

stg

Top Contributor
Ich habe es getestet. Meine if Abfragen liefern alle die richtigen Ergebnisse. Meiner ComboBox wird aber kein neues Item hinzugefügt.

Kann ich meiner ComboBox nicht mit der Methode .addItem() ein neues Item hinzufügen?

Du hast ein Verhalten, dass du nicht erklären kannst und weißt vom Weg von der Datenhaltung her hin zur Darstellung nicht, wo du nach dem Fehler suchen sollst. Was sagt dir das über die Struktur deines Codes?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
Rxiiz Objekt aus ComboBox entfernen Java Basics - Anfänger-Themen 4
I JSON in Objekt umwandeln Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
Say Objekt Java Basics - Anfänger-Themen 4
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
M BlueJ Objekt in Objektliste Java Basics - Anfänger-Themen 2
B Objekt in Klassendiagramm an fremdes Objekt weiterreichen? Java Basics - Anfänger-Themen 6
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
melaniemueller Fernseher als Objekt Java Basics - Anfänger-Themen 9
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
S Aufzurufendes Objekt Java Basics - Anfänger-Themen 3
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
N LocalTime einem Objekt zuweisen Java Basics - Anfänger-Themen 2
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
J Y-Koordinate von GUI-Objekt bestimmen Java Basics - Anfänger-Themen 2
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
H Objekt aus einem Array löschen Java Basics - Anfänger-Themen 1
H Objekt im Array speichern Java Basics - Anfänger-Themen 2
H Objekt mit Methode erstellen Java Basics - Anfänger-Themen 6
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
E Was kommt in ein Objekt und was in die Main Methode? Java Basics - Anfänger-Themen 8
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
W OOP Objekt Methode Java Basics - Anfänger-Themen 9
A Objekt in Arrayliste Java Basics - Anfänger-Themen 2
B Mit methode Objekt aus anderer Klasse erstellen Java Basics - Anfänger-Themen 6
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
M Objekt einer Klasse speichert die Veränderung nicht Java Basics - Anfänger-Themen 1
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
A Zufälliges Objekt basierend auf Wahrscheinlichkeiten bekommen. Java Basics - Anfänger-Themen 4
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
S Objekt-Attribute "variabel" gestalten Java Basics - Anfänger-Themen 10
J Datenbankstruktur als Objekt anlegen Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
B Objekt an neue Stage übergeben? Java Basics - Anfänger-Themen 9
scratchy1 Wie deklariert man eine Methode, die ein Objekt zurückgeben soll? Java Basics - Anfänger-Themen 22
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
J Objekt erste freie Stelle zuweisen Java Basics - Anfänger-Themen 3
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
C Objekt soll ein Array sein. Java Basics - Anfänger-Themen 15
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
CptK Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
R Vererbung werte von einem Objekt aus ein anderes übertragen Java Basics - Anfänger-Themen 7
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
L Objekt Typ zur Laufzeit ermitteln Java Basics - Anfänger-Themen 1
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
M Methode Objekt als Parameterübergabe Java Basics - Anfänger-Themen 6
G Objekt der selben Klasse wie selbst mit Aufrufen des Konstruktors erzeugen Java Basics - Anfänger-Themen 14
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben