Tabelle wird nicht richtig dargestellt

GhostfaceChilla

Bekanntes Mitglied
Hallo Leute.
Mein Programm soll Daten aus einer Datenbank laden. Diese Daten werden in ein Objekt gespeichert,welches dann in einer TableView angezeigt wird.(JavaFX)
Aber hier mal mein Code das man auch versteht was ich meine:

Die Musik Klasse.Diese beinhaltet die Daten die in der Tabelle angezeigt werden sollen.
Java:
public class Music {
    
    public static int idFinally;
    private SimpleIntegerProperty id = new SimpleIntegerProperty();
    private SimpleStringProperty titel = new SimpleStringProperty();
    private SimpleStringProperty playtime = new SimpleStringProperty();
    private SimpleStringProperty interpret = new SimpleStringProperty();
    private SimpleStringProperty album = new SimpleStringProperty();
    private SimpleStringProperty genre =  new SimpleStringProperty();
    private SimpleDoubleProperty score = new SimpleDoubleProperty();

    public Music(int id, String titel,String playtime, String interpret,
                    String album, String genre, double score) {
        setId(id);
        setTitel(titel);
        setPlaytime(playtime);
        setInterpret(interpret);
        setAlbum(album);
        setGenre(genre);
        setScore(score);
    }

    public int getId(){
        return id.get();
    }
    
    public void setId(int id){
        this.id.set(id);
    }
    
    public String getTitel() {
        return titel.get();
    }

    public void setTitel(String titel) {
        this.titel.set(titel);
    }

    public String getPlaytime() {
        return playtime.get();
    }

    public void setPlaytime(String playtime) {
        this.playtime.set(playtime);
    }

    public String getInterpret() {
        return interpret.get();
    }

    public void setInterpret(String interpret) {
        this.playtime.set(interpret);
    }

    public String getAlbum() {
        return album.get();
    }

    public void setAlbum(String album) {
        this.playtime.set(album);
    }

    public String getGenre() {
        return genre.get();
    }

    public void setGenre(String genre) {
        this.playtime.set(genre);
    }

    public Double getScore() {
        return score.get();
    }

    public void setScore(double score) {
        this.score.set(score);
    }
    
    
    
}

Dann die Klasse die eine Verbindung zur Datenbank aufbaut:
Java:
public abstract class DatabaseConnector {

    private static Connection connection;

    public static Connection getConnection() {
        return connection;
    }

    public static void setConnection(Connection con) {
        DatabaseConnector.connection = con;
    }
    
    /**
     * Methode um eine Verbindung mit einer Datenbank aufzubauen.
     * @param dbName Name der zu ladenden Datenbank
     * @throws NamingException
     * @throws SQLException 
     * @throws java.lang.ClassNotFoundException 
     */
    public static void connectTo(String dbName) throws NamingException, SQLException, ClassNotFoundException{
        Class.forName("org.hsqldb.jdbc.JDBCDriver");
        setConnection(DriverManager.getConnection("jdbc:hsqldb:file:src/mediabox/database/database;shutdown=true", "", ""));
    }
    
    /**
     * 
     * @return Gibt die geladenen Zeilen in Form einer ArrayList zurück
     * @throws SQLException
     * @throws ConnectionException Fehlermeldung, falls zuvor nicht die @connectTo Methode aufgerufen wurde
     */
    public static ArrayList loadEntries() throws SQLException, ConnectionException{
        if(connection != null){
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery("SELECT * FROM MUSIC");
            ArrayList entries = new ArrayList();
            while(rs.next()){
                Music m = new Music(rs.getInt(1), rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6),
                                    rs.getDouble(7));
                entries.add(m);
            }
            return entries;
        }
        else{
            throw new ConnectionException("Es besteht keine Verbindung zur "
                    + "Datenbank. <ERROR : line 47, DatabaseConnector");
        }
            
    }
}

Und zu guter letzt noch die View:
Code:
<TableView fx:id="libraryNode" editable="true" xmlns:fx="http://javafx.com/fxml">
    <columns>
        <TableColumn text="Index" >
            <cellValueFactory>
                <PropertyValueFactory property="id" />
            </cellValueFactory>
        </TableColumn>
        <TableColumn text="Titel" >
            <cellValueFactory>
                <PropertyValueFactory property="titel" />
            </cellValueFactory>
        </TableColumn>
        <TableColumn text="Dauer" >
           <cellValueFactory>
               <PropertyValueFactory property="playtime" />
           </cellValueFactory> 
        </TableColumn>
        <TableColumn text="Interpret" >
            <cellValueFactory>
                <PropertyValueFactory property="interpret" />
            </cellValueFactory>
        </TableColumn>
        <TableColumn text="Album" >
            <cellValueFactory>
                <PropertyValueFactory property="album" />
            </cellValueFactory>
        </TableColumn>
        <TableColumn text="Genre" >
           <cellValueFactory>
               <PropertyValueFactory property="genre" />
           </cellValueFactory> 
        </TableColumn>
        <TableColumn text="Bewertung" >
           <cellValueFactory>
                <PropertyValueFactory property="score" />
           </cellValueFactory> 
        </TableColumn>
    </columns>
</TableView>

Nun ist mein Problem das die Daten nicht richtig angezeigt werde. Es wird komischerweise nur die ID und der Titel richtig angezeigt und am ende die Bewertung. Unter Dauer steht dann z.B Horror, dabei würde das unter Genre gehören
Ich finde den Fehler nicht. Mir ist aufgefallen wenn ich die DB nur bis zu Spalte 3 also Dauer auslese, wird die Dauer auch richtig angezeigt.Aber sobald ich alle Spalten einlese steht unter Dauer immer Horror :/
Jemand ne Idee?Ich finde den Fehler nicht....

-GhostfaceChilla-
 

Joose

Top Contributor
Nun ist mein Problem das die Daten nicht richtig angezeigt werde. Es wird komischerweise nur die ID und der Titel richtig angezeigt und am ende die Bewertung. Unter Dauer steht dann z.B Horror, dabei würde das unter Genre gehören
Ich finde den Fehler nicht. Mir ist aufgefallen wenn ich die DB nur bis zu Spalte 3 also Dauer auslese, wird die Dauer auch richtig angezeigt.Aber sobald ich alle Spalten einlese steht unter Dauer immer Horror :/
Jemand ne Idee?Ich finde den Fehler nicht....

Hört sich ganz danach an das du die Daten in der falschen Reihenfolge in dein Objekt packst!
Überschreibe die toString() Methode deiner Music Klasse und gib in der Methode "loadEntries" jedes der Music Objekte auf der Konsole aus sobald es mit Daten der DB erstellt wurde.

Sind hier die Daten richtig?
Ich glaube dein SELECT verursacht den Fehler, ersetze das "*" im SELECT durch alle Spalten in der benötigten Reihenfolge!
 

GhostfaceChilla

Bekanntes Mitglied
Also die Reihenfolge müsste stimmen. Auch das SELECT ist nicht das Problem, da ich alle Zeilen in das ResultSet lade und mit ResultSet.next so lange die Zeilen durchgehe bis es keine mehr gibt. Und mit get(x), erfrage ich die Spalte in der jeweiligen Zeile.
Und das ist meine Ausgabe auf der Konsole:

1
Was geeeht?
1:44
null
null
null
4.0

Die Ausgabe findet in der Music Klasse statt. Führe ich die Ausgabe in der DatabaseConnector Klasse aus durch rs.get(x) dann bekomme iich diese Ausgabe:
1Was geeeht? 1:44 Hallo OK GRUSEL 4.0

Das stimmt auch also werden die Daten richtig auser Datenbank ausgelesen, d.h es muss ein Fehler inder Music Klasse sein. Ich glaube ich gucke mir das Prinzip der SimpleXXXProperties nochmal etwas genauer an, vllt. habe ich da einen Fehler gemacht.

-GhostfaceChilla-
 
Zuletzt bearbeitet:

Joose

Top Contributor
Also die Reihenfolge müsste stimmen. Auch das SELECT ist nicht das Problem, da ich alle Zeilen in das ResultSet lade und mit ResultSet.next so lange die Zeilen durchgehe bis es keine mehr gibt. Und mit get(x), erfrage ich die Spalte in der jeweiligen Zeile.

Wenn du beim Anlegen deiner Datenbanktabelle die Reihenfolge der Spalten anders angegeben hast wie du sie nun auslesen willst kann es vorkommen das die Werte dann natürlich vertauscht sind.
Außerdem ist ein "SELECT *" von der Performance her langsamer als ein "SELECT [Spalte1], [Spalte2], ..... , [SpalteN]".
Bei diesem Minimalbeispiel macht es zwar nicht viel aus, aber besser gleich angewöhnen!

Und das ist meine Ausgabe auf der Konsole:
1
Was geeeht?
1:44
null
null
null
4.0

Da wo null steht müssten lauter Strings stehen. Ich kapier es einfach nicht. Ich muss den Code nochmal richtig analysieren :)

Schön nun weiß ich deine Konsolenausgaben, nur wo du nun was am Code geändert hast zeigst du mir nicht.
Also bitte auch deine Änderungen am Code zeigen.
 

GhostfaceChilla

Bekanntes Mitglied
Java:
while(rs.next()){
                Music m = new Music(rs.getInt(1), rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6),
                                    rs.getDouble(7));
                System.out.println(rs.getInt(1) + rs.getString(2) +rs.getString(3)+rs.getString(4)+rs.getString(5)+rs.getString(6)+
                                    rs.getDouble(7));
                entries.add(m);
            }
            return entries;

Ich habe nur diese Konsolenausgabe hineingebracht und da werden die Elemnte korrekt ausgegegebn. D.h die Daten wurden auch in der richtigen Reihenfolge geladen.

-GhostfaceChilla-
 

Joose

Top Contributor
Schau dir die setter Methoden deiner Klasse mal an.
Du hast nur einen dummy Copy&Paste Fehler drinnen :lol:

setInterpret, setAlbum und setGenre sind betroffen
 
Zuletzt bearbeitet:

dzim

Top Contributor
Mich wundert ja fast eher, das überhaupt was angezeigt wird, da du die "<propName>Property()"-Methode nicht in deiner Modellklasse mit angegeben hast...
 

GhostfaceChilla

Bekanntes Mitglied
Vielen dank Joose :D

Mich wundert ja fast eher, das überhaupt was angezeigt wird, da du die "<propName>Property()"-Methode nicht in deiner Modellklasse mit angegeben hast...

Braucht man die überhaupt?Ich habe mir diverse Seiten für die Erstellung der TableView via fxml und das Füllen der Tabelle angeguckt und nirgends war etwas über diese Methode gestanden:shock:

-GhostfaceChilla-
 

dzim

Top Contributor
Soweit ich weiss: Ja. Aber da es bei dir geht, mach dir da erst mal nicht so die Rübe. :)

Grundsätzlich aber ist es sinnvoll den dritten "getter" zu haben, wenn du mal selbst Änderungen am Modell überwachen möchtest (z.B., auch wenn das jetzt vielleicht nicht de eleganteste Lösung wäre, wenn du ein Feld editierst - kommt ja mitunter vor, oder? - dann kannst du direkt ein DB-update machen).
 
Zuletzt bearbeitet:

GhostfaceChilla

Bekanntes Mitglied
Ok das werde ich berücksichtigen :)
Ja man kann die Tabelle editieren aber noch nicht in dieser Version.Da alles über eine Fernbedienung gesteurt wird, wird das mit dem editieren und so noch etwas warten müssen, bis die Fernebdienung auch kompleet richtig funktioniert.

-GhostfaceChilla-
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Trace-Tabelle erstellen Allgemeine Java-Themen 3
G Excel Tabelle lesen und in neue Excel Tabelle einfügen Allgemeine Java-Themen 11
L Hash-Tabelle Allgemeine Java-Themen 2
F Tabelle aus CSV, 2 dimensionale HashMap? Allgemeine Java-Themen 4
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
B Hilfe!! spiel um Funktion des Selektierens erweitern (mit ASCII-Tabelle) Allgemeine Java-Themen 3
H Zweidimensionales Array - Zellen der Tabelle verbinden Allgemeine Java-Themen 2
C Zeilen-"Vektor" aus Excel-Tabelle suchen Allgemeine Java-Themen 0
J Datentypen in Java Tabelle Allgemeine Java-Themen 2
T 4x4 Tabelle als Bitboard darstellen Allgemeine Java-Themen 5
P Reordering einer Tabelle im Frontend Allgemeine Java-Themen 1
S 2-spaltige Ausgabe als Tabelle ausgeben Allgemeine Java-Themen 12
K Apache POI Word Tabelle Zellen verbinden Allgemeine Java-Themen 4
K Apache POI Word Tabelle Spaltenbreite festlegen Allgemeine Java-Themen 7
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
Todesbote Zeilen aus Excel in andere Excel Tabelle kopieren Allgemeine Java-Themen 0
R HTML Tabelle durchsuchen Allgemeine Java-Themen 3
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
G Combobox füllen mit daten aus einer Tabelle Allgemeine Java-Themen 4
Iron Monkey Spalte der Tabelle abwechselnd färben Allgemeine Java-Themen 8
Joew0815 JList + JTableModel: Parameter der Tabelle übergeben Allgemeine Java-Themen 10
K HTTP Auslesen einer Tabelle Allgemeine Java-Themen 8
S EAN-Code Tabelle für CD's Allgemeine Java-Themen 2
R Datum in Excel Tabelle eintragen Allgemeine Java-Themen 6
A Tabelle mit iText erstellen Allgemeine Java-Themen 3
M Aus Excel Tabelle lesen und Werte in Array speichern Allgemeine Java-Themen 15
P java tabelle auslesen - xls (excel) fehler Allgemeine Java-Themen 5
A Excel Tabelle in JFrame darstellen Allgemeine Java-Themen 6
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2
M In einer Tabelle rechnen Allgemeine Java-Themen 12
D Tabelle umwandeln Allgemeine Java-Themen 12
M Rein informativ - Daten aus Excel-Tabelle in Java-Programm importieren Allgemeine Java-Themen 3
M Realisierung einer dynamischen Tabelle unter Android Allgemeine Java-Themen 3
nrg JDOM Tabelle lesen Allgemeine Java-Themen 6
S Javascript & MSAccess Tabelle Allgemeine Java-Themen 5
Weiti Programm zum erstellen einer tabelle aus textdateien Allgemeine Java-Themen 24
R Tabelle - Berechnung der "Zeilenart" Allgemeine Java-Themen 2
D Bild in text tabelle umwandeln Allgemeine Java-Themen 2
A Text durchgestrichen in einer Tabelle darstellen Allgemeine Java-Themen 2
D Spaltenbereite einer Tabelle Allgemeine Java-Themen 2
J Leerer Spalteninhalt in einer Tabelle in JSP Allgemeine Java-Themen 5
M Datum in Tabelle formatiert ausgeben Allgemeine Java-Themen 3
P Datenbank Tabelle spiegeln Allgemeine Java-Themen 22
G Probleme mit dem erstellen einer Tabelle Allgemeine Java-Themen 6
G Tabelle in ein Array schreiben Allgemeine Java-Themen 3
S Excel Tabelle Allgemeine Java-Themen 8
G HTML Tabelle auslesen Allgemeine Java-Themen 8
J Problem mit dem aktualisieren der Tabelle Allgemeine Java-Themen 8
B Tabelle. bei Wertänderung was bestimmtes machen Allgemeine Java-Themen 3
S Werte in Tabelle einfügen! Allgemeine Java-Themen 9
L Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis Allgemeine Java-Themen 4
M Daten in Excel Tabelle schreiben? Allgemeine Java-Themen 7
H Hash Tabelle einlesen und die Werte an ein Array übergeben Allgemeine Java-Themen 10
D iText: Tabelle in Footer einfügen Allgemeine Java-Themen 6
H Leere Tabelle initialisieren Allgemeine Java-Themen 2
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Y MVVM wie wird Eventhandler tausch geregelt Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Y Warum wird das JLabel falsch verschoben? Allgemeine Java-Themen 1
T Schaltfläche wird nicht gefunden Allgemeine Java-Themen 4
N Eingabe wird immer als "false" ausgegeben Allgemeine Java-Themen 6
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
hello_autumn Java_Home geändert auf Java 13, trotzdem wird Java Version 8 angezeigt. Allgemeine Java-Themen 2
Thallius Char +1 wird int? Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
F Scrollbar wird nicht angezeigt Allgemeine Java-Themen 0
B Discord Bot - Funktion wird nicht aufgerufen Allgemeine Java-Themen 1
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
S Wird bei den JREs 9, 10, 11+ ueberhaupt noch Bytecode ausgefuehrt..? Allgemeine Java-Themen 8
FRI3ND JFrame wird nicht angezeigt Allgemeine Java-Themen 3
T Plötzlich wird package nicht mehr gefunden Allgemeine Java-Themen 3
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
kodela Klassen Klassenvariable wird nicht gesetzt Allgemeine Java-Themen 23
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
kodela Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt Allgemeine Java-Themen 5
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
D Cursor unsichtbar, wenn Kontextmenü aufgerufen wird Allgemeine Java-Themen 5
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben