Java JTableModel mit ResultSet zeigt keine Spaltenüberschriften

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Hallo Leute,

ich bastel wieder mal an einer GUI Anwendung und habe ein Problem.

In einem JPanel gibt es eine SplitPane die horizontal splittet, im unteren Teil liegt eine ScrollPanel und darauf eine JTable.
Die JTable bekommt von mir ein eigenes TableModel, was einen ResultSet erfordert, soweit so gut.

Wenn die Applikation ausgefürt wird klappt soweit auch alles, mir werden die Daten in der Tabelle ausgegeben, die ich Abfrage allerdings fehlen immer die Spaltenüberschriften in der Tabelle.

Woran kann das liegen ?

Anbei ein kleiner Codeausschnitt:

PHP:
// Model der View:

 private ResultSet getResults() {       
        ResultSet rs;
        rs = dbhandler.executeStatement("SELECT Kundennummer AS Kundennummer,"
                + "Vorname AS Vorname, "
                + "Name AS Name, Strasse AS Adresse FROM Kunde");
        return rs;
    }
    
    public TableModel setTableModel() {
        TableModel tbm = null;
        try {
            tbm = new CustomerTableModel(getResults());
        } catch (Exception ex) {
            Logger.getLogger(CustomerModel.class.getName()).log(Level.SEVERE, null, ex);
        }
        return tbm;
    }

// Die View:

jTable1.setModel(model.setTableModel());
 
ich hoffe das hier kann dir helfen. wir musste mal mit hilfe des abstracttablemodels einen table für das kleine einmaleins bauen:

Code:
package gui.exercise8.assignment2;

import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel
{
    private static final long serialVersionUID = 1L;

    private int rows;

    private int columns;

    public MyTableModel(int rows, int columns)
    {
        this.rows = rows;
        this.columns = columns;
    }

    public int getRowCount()
    {
        return rows;
    }

    public int getColumnCount()
    {
        return columns;
    }

    public Object getValueAt(int row, int column)
    {
        String str = "";
        int value = 0;
        row++;
        column++;
        value = row * column;
        str = row + " * " + column + " = " + value;
        return str;
    }

    public String getColumnName(int column)
    {
        return ++column + "er";

    }
}

das ist mein mode für das kleine einmaleins. ich weiß nicht genau was für nen tabletyp du verwendest, aber vllt solltest du auf abstracttablemodel umsteigen, denn dort gibt es ne methode namens get columnname. ich weiß nicht ob es die bei dir auch gibt. hast du deine tabelle auch groß genug angelegt?
 
Garnicht, da wenn die Table in einer ScrollPane liegt die Spaltennamen automatisch mit angezeigt werden sollten.

Ich habe zuvor eine ähnliche Anwendung geschrieben, allerdings auf Basis eines MSSQL Datenbank.
Die jetzige Anwendung hat aber eine Embedded Database SQLite, liegt es vielleicht daran ?

EDIT:
Mein TableModel ist auch von AbstractTableModel abgeleitet und beinhaltet eine Funktion zur Rückgabe der Spaltennamen.
 
Zuletzt bearbeitet:
der spaltenname wird aber nicht automatisch angezeigt.

werf mal einen blick in die java 7 api und dann in jscrollpane. dort steht drin, dass es optional ist und siomit nicht automatisch passiert. d.h. du musst es selber reinfriemeln.

gibt auch beispiele in der java 7 api wie es dann gehen sollte.
 
Hiermit hole ich mir das jeweilige ResultSet:

PHP:
    public void setRS(ResultSet rs) throws Exception {
        this.rs = rs;
        ResultSetMetaData metaData = rs.getMetaData();
        rowCount = 0;
        columnCount = metaData.getColumnCount();
        
        while (_rs.next()) {
            Object[] row = new Object[columnCount];
            for (int j = 0; j < columnCount; j++) {
                row[j] = rs.getObject(j + 1);
            }
            data.add(row);
            rowCount++;
        }
    }

Wenn ich das in anderen Projekten verwende bzw. in vorherigen Projekten kamen die Spaltennamen immer mit.

Nochmal die Frage wieso sollte das nun nicht so sein ?
 
Tippfehler meinerseits natürlich ist es rs.next()
 
Das Problem liegt an SQLite.

Habe es nochmal mit der jetzigen Anwendung und einer anderen Datenbank Engine versucht(Apache Derby) und schon werden mir die Spaltennamen angezeigt.

Apache Derby ist aber nicht so gut zu benutzen, da ich lieber auf SQL Ebene abfragen will, ob es schon eine Tabelle mit Namen xyz gibt, anstatt das über Zeilen von Code in Java selbst zu machen.
 
schon mal mariaDB probiert?
als oracle sun gekauft hatte, hat sich nen teil der com hingesetzt und das entwickelt.

https://mariadb.org/

da mal nen link. vllts klappt es ja mit der. ist alles sql basiert.
 
Zurück
Oben