if Abfrage funktioniert nicht richtig

Juelin

Bekanntes Mitglied
Hallo Gemeinde,
ich lese eine Datenbank mit den Feldern (Nachname, Vorname, Geburtsdatum) aus. Sortiert nach Nachname, Vorname und Geburtstag.
Das funktioniert auch alles.
Nun will ich wissen, wann sich eine Person ändert. (siehe IF-Abrage Text Bold).
Aber obwohl im Debug der Inhalt der Felder alle gleich sind trifft die IF-Abfrage zu.
Keine Ahnung warum:

Java:
    public void dbTabellenEintraegeArray()
        {
        int a = 0;
        String x;
        String[] dbgelesen = new String[999999];
        VitalShowController.anzeintraege = 0;
        if (dbOpen == 1)
            {
            boolean l = true;
            boolean g;
            dbRet = 0;
            String nachname;
            String vorname;
            String geburtsdatum;
            String mnachname = "";
            String mvorname = "";
            String mgeburtsdatum = "";
            try
                {
                Statement befehl = verbindung.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                ResultSet rs = befehl.executeQuery(dbBefehl);
                while (l)
                    {
                    rs.next();
                    g = rs.isAfterLast();
                    if (g)
                        {
                        l = false;   
                        }
                    else
                        {
                        nachname =rs.getString("Nachname");
                        vorname =rs.getString("Vorname");
                        geburtsdatum =rs.getString("Geburtsdatum");
[B]                        if ((nachname != mnachname) || (vorname != mvorname) || (geburtsdatum != mgeburtsdatum))[/B]
                            {
                            x = vorname+" "+nachname+" "+geburtsdatum;
                            dbgelesen[VitalShowController.anzeintraege] = x;
                            VitalShowController.anzeintraege++;
                            mnachname = nachname;
                            mvorname = vorname;
                            mgeburtsdatum = geburtsdatum;
                            }
                        a++;   
                        }
                    }
                rs.close();
                }
            catch(SQLException err)
                {
                dbRet = 5;   
                }
            }
        else
            {
            dbRet = 6;   
            }
        if (VitalShowController.anzeintraege > 0)
            {
            VitalShowController.eintraege = new String[VitalShowController.anzeintraege];
            for (a=0; a<VitalShowController.anzeintraege; a++)
                {
                x = dbgelesen[a];
                VitalShowController.eintraege[a] = x;
                }
            }
        }

Habe mal im Debuger nach" dbgelesen[VitalShowController.anzeintraege] = x;" gestoppt
und die Variablen vom debuger sind in bild1..

Wer kann mir das erklären?

Danke umd Gruß
Jürgen
 

Anhänge

  • bild1.jpg
    bild1.jpg
    148 KB · Aufrufe: 0

Oneixee5

Top Contributor
Strings vergleicht man normalerweise nicht mit == oder !=. Da Strings Objekte sind, vergleicht man diese mit "test".equals("test) oder !"test".equals("test) oder auch Objects.equals(s1, s2).

 

Oneixee5

Top Contributor
Noch ein ungefragter Hinweis, diesen Code kannst du einfach ersetzen:
Java:
                while (l)
                    {
                    rs.next();
                    g = rs.isAfterLast();
                    if (g)
                        {
                        l = false;   
                        }
                    else
                        {
                        ...
durch:
Java:
                while (rs.next()) {
                    
                    //-> other code
                    
                }
Wenn du deinen Code entsprechend der coding Richtlinien für Java formatierst, solltest du das besser erkennen können.
 

Juelin

Bekanntes Mitglied
Danke Oneixer5,
das hat geholfen.
Muss man aber auch dran denken wenn man Strings vergleicht.
Das finde ich blöd.
Alles Gute und Gruß
Jürgen
 

Oneixee5

Top Contributor
Muss man aber auch dran denken wenn man Strings vergleicht.
Das ist eigentlich ganz einfach: keine Operatoren auf Objekte anwenden. Das überladen von Operatoren ist in Java nicht gewollt. Wenn du etwas besser in der Materie bist, dann wirst du Primitive nur noch selten direkt verwenden, denn diese sind eigentlich der Sonderfall.
 

Juelin

Bekanntes Mitglied
Nein in Delphi habe ich das Problem nicht. ich kann jeden Datentyp im IF vergleichen.
Das regelt Delphi selber.
Gruß
Jürgen
 

KonradN

Super-Moderator
Mitarbeiter
Ist das so? Also klar - man kann jeden Datentyp im IF vergleichen, aber bei Referenztypen findet (in der Regel) nur ein Vergleich der Referenzen statt und kein Vergleich des Inhalts.

Ich bin nicht wirklich tief in Delphi drin, aber Delphi hat Operator Overloading nur für Records und nicht für Klassen:
Operator Overloading (Delphi) - RAD Studio (embarcadero.com)

Records sind auch Wertetypen - somit ist der Vergleich mit equals (=) nur für Wertetypen möglich. Bei Klassen (Referenztypen) ist der Vergleich mit = auch nur ein Vergleich der Referenz (Also bei eigenen Klassen).

Die String Typen (AnsiString, UnicodeString und WideString sind zwar Referenztypen aber haben teilweise auch Verhaltensweisen von Wertetypen. Der Vergleich mit = ist so eine besondere Verhaltensweise, die tatsächlich möglich ist. Und da gibt es wohl auch Abweichungen bei der Speicherverwaltung...

Also ja, Strings kann man dann einfach mit = vergleichen. Das ist aber kein universelles Vorgehen. Und das führt dazu, dass mit Delphi eher unsympathisch ist und ich mich daher dagegen entschieden habe, da mehr Zeit zu investieren. Und natürlich: Meine Erkenntnisse können auch falsch sein, da ich halt nicht zu viel Zeit da rein gesteckt habe.
 

Juelin

Bekanntes Mitglied
Hallo Konrad,
Danke für die Antwort. im Prinzip bin ich Deiner Meinung. Arbeite aber seit 2000 mit Delphi, mein erstes war Delphi5. Heute bin ich bei Delphi11.
Könntest Du bitte nochmal im Beitrag "Probleme bei Stage.close()" reinschauen.
Die letzten zwei Einträge von mir.
Wäre schön, wenn Du mir da helfen könntest.
Danke und Gruß
Jürgen
 

Manul

Mitglied
Noch ein ungefragter Hinweis, ...
Da wir einmal dabei sind ...

Was auch noch auffällt an dem Code: Das (leider) Pascal-typische Idiom am Methodenanfang erst mal alle möglichen Variablen zu deklarieren (bzw. in Pascal: zu müssen), und diese dann irgendwann in der Methode selbst zu verwenden (und dann teilweise in unterschiedlichsten Kontexten wiederzuverwenden).

In Java hingegen ist das ein Antipattern, welchen den Code eher schlecht wartbar macht, ohne irgendeinen besonderen Nutzen zu bringen.
Grundprinzip sollte hier eher sein:
  • Scope von Variablen möglichst klein halten (nur in dem Scope deklarieren wo sie auch verwendet werden)
  • Jede Variable hat genau einen Zweck (d.h. nicht an verschieden Stellen für verschiedene Sachen wiederverwenden)

d.h. nicht:
Java:
public void foo() {
    int i = 0;
    
    ... 100 Zeilen später ...

    for (i = 0; i < ...; i++) {
        ... do something ...
    }
}
sondern:
Java:
public void foo() {
    ... viele Zeilen ...

    for (int i = 0; i < ...; i++) {
        ... do something ...
    }
}
Auch das hier sieht recht dubios aus:
Code:
String x;
...
viele Zeilen später...
...
// in der While-Schleife:
x = vorname+" "+nachname+" "+geburtsdatum;
// könnte vermutlich problemlos ersetzt werden durch:
dbgelesen[VitalShowController.anzeintraege] = vorname + " " + nachname + " " + geburtsdatum;

// und später noch mal in einem komplett anderen Kontext zugewiesen:
x = dbgelesen[a];
// auch hier wäre "x" komplett unnötig:
VitalShowController.eintraege[a] = dbgelesen[a];

Und wenn die scope-minimierten Nicht-Schleifenindex-Variablen dann auch noch halbwegs deskriptive Namen kriegen (und nicht bloß "l" ... :eek:, "g", "a" oder "x") dann versteht man den Code auch noch 2 Wochen später etwas besser ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
D Javafx Combobox Abfrage aus mysql AWT, Swing, JavaFX & SWT 8
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
J ActionListener per Innere Klasse oder e.getActionCommand() if-Abfrage? AWT, Swing, JavaFX & SWT 12
I JButton Abfrage AWT, Swing, JavaFX & SWT 2
A Ja/Nein Abfrage in jButton AWT, Swing, JavaFX & SWT 3
W Dartprogramm - Abfrage der Mauspos. AWT, Swing, JavaFX & SWT 4
S JComboBox mit Ergebnis einer SQL Abfrage füllen AWT, Swing, JavaFX & SWT 39
N Aufgabe: ActionEvent - Abfrage AWT, Swing, JavaFX & SWT 7
N Problem mit ActionEvent - Abfrage AWT, Swing, JavaFX & SWT 10
B Methode setzt nicht das Layout in einer if-Abfrage AWT, Swing, JavaFX & SWT 13
B Layouts mit if-Abfrage ueberpruefen AWT, Swing, JavaFX & SWT 9
S Ergebnisvektor aus DB Abfrage in JTable anzeigen AWT, Swing, JavaFX & SWT 5
H JCheckBox - Ist die Abfrage wirklich so umständlich ? AWT, Swing, JavaFX & SWT 3
A JFrame: Abfrage ob schliessen oder nicht? AWT, Swing, JavaFX & SWT 8
F Abfrage, ob Key gedrückt gehalten wird ?? AWT, Swing, JavaFX & SWT 2
T Doppelte Abfrage eine Checkbox vermeiden AWT, Swing, JavaFX & SWT 2
A Abfrage nach Sichtbarkeit vom JFram AWT, Swing, JavaFX & SWT 3
thE_29 TableRenderer und JPanel => Abfrage auf Componenten Posit AWT, Swing, JavaFX & SWT 2
T mousemoved abfrage - aber welches event wenn maus weg? AWT, Swing, JavaFX & SWT 2
O Abfrage ob eine bstimmte Komponente den Focus hat AWT, Swing, JavaFX & SWT 4
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
M Scrollbar funktioniert nicht AWT, Swing, JavaFX & SWT 10
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Swing Tooltip-Delay funktioniert nicht immer. AWT, Swing, JavaFX & SWT 1
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
sserio Wie funktioniert ein Controller bei JavaFx? AWT, Swing, JavaFX & SWT 1
U Wie funktioniert das rotieren unter 2dGraphics, also wie stelle ich z. B. 90° ein? AWT, Swing, JavaFX & SWT 1
U Wie funktioniert Polygon? AWT, Swing, JavaFX & SWT 1
U Wie genau funktioniert 2dgraphics, in diesem Bezug? AWT, Swing, JavaFX & SWT 4
S ChoiceBox aus ArrayList per setValue() mit Wert belegen funktioniert nicht. AWT, Swing, JavaFX & SWT 0
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
H BufferedImage zurücksetzen funktioniert nicht AWT, Swing, JavaFX & SWT 12
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
EinNickname9 Einfacher parser funktioniert nicht AWT, Swing, JavaFX & SWT 2
F Swing Adapt Row Height funktioniert nicht richtig :( AWT, Swing, JavaFX & SWT 7
P Swing jxmapviewer hinzufügen/nutzen funktioniert nicht AWT, Swing, JavaFX & SWT 7
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
J Anbindung Textfeldklasse an Table funktioniert nicht AWT, Swing, JavaFX & SWT 3
R Actionlistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
H Bewegung funktioniert nicht AWT, Swing, JavaFX & SWT 3
N Pixelfarbe abgleichen funktioniert nicht AWT, Swing, JavaFX & SWT 5
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
M Swing setMaximumSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
K JavaFX funktioniert nicht AWT, Swing, JavaFX & SWT 2
B AWT actionPerformed Method funktioniert nicht AWT, Swing, JavaFX & SWT 12
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
J JavaFX addListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
P CardLayout funktioniert fehlerhaft AWT, Swing, JavaFX & SWT 13
L WrapLayout funktioniert nicht AWT, Swing, JavaFX & SWT 1
kodela Accalerator für einige Menüoptionen funktioniert nicht mehr AWT, Swing, JavaFX & SWT 3
S JavaFX mit javac compilieren funktioniert nicht AWT, Swing, JavaFX & SWT 2
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
J AWT System Farben / java.awt.SystemColor funktioniert nicht AWT, Swing, JavaFX & SWT 4
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
K javafx app > "run in browser" funktioniert nicht AWT, Swing, JavaFX & SWT 3
N JavaFX GridPane Halignment funktioniert nicht AWT, Swing, JavaFX & SWT 1
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
F "ActionListener" funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z BoxLayout funktioniert nicht und Buttongröße AWT, Swing, JavaFX & SWT 18
C Java Hintergrund funktioniert nicht AWT, Swing, JavaFX & SWT 9
J Swing Wie funktioniert dieser ChangePropertyListener??? AWT, Swing, JavaFX & SWT 0
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
M UIManager funktioniert nicht mit Farben AWT, Swing, JavaFX & SWT 9
M Swing UIManager funktioniert nicht mit Farben AWT, Swing, JavaFX & SWT 0
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
S JavaFX wie funktioniert CSS und javaFX AWT, Swing, JavaFX & SWT 19
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
M JavaFX Eventhandler Funktioniert nicht AWT, Swing, JavaFX & SWT 3
Sogomn JavaFX Injektion funktioniert nicht AWT, Swing, JavaFX & SWT 4
Blender3D Swing KeyBoardListener funktioniert nicht unter UBUNTU AWT, Swing, JavaFX & SWT 7
J JavaFX Button funktioniert(nicht) AWT, Swing, JavaFX & SWT 3
J DefaultCloseOperation funktioniert nicht AWT, Swing, JavaFX & SWT 9
F JavaFX ObservableList -- warum funktioniert das so.... AWT, Swing, JavaFX & SWT 3
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
Paul15 Button funktioniert nur einmal AWT, Swing, JavaFX & SWT 9
D Swing Warum erhalte ich keine Ausgabe? Funktioniert der equals-vergleich in actionPeformed nicht richtig? AWT, Swing, JavaFX & SWT 3
H UpdatePolicy wird nicht richtig gesetzt / funktioniert nicht AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben