JTable mit MySQL Datenbank füllen

Status
Nicht offen für weitere Antworten.
A

AhnungsloserNoob

Gast
hallo!

ich will die daten einer mysql tabelle in ein jtable bringen. das habe ich folgendermaßen versucht:

Code:
public void Datenbank() 
    {
        java.sql.Connection verbindung;
        String db;
        String user = io.Offnen(5);
        String password = io.Offnen(6);
        
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Treiber geladen");
            
            verbindung = null;
            db = "jdbc:mysql://localhost/tms1";
            verbindung = java.sql.DriverManager.getConnection(db,user, password);
            java.sql.Statement stm = verbindung.createStatement();
            
            String sql = "SELECT * from mitglieder ORDER BY nachname";
            java.sql.ResultSet ergebnis = stm.executeQuery(sql);
            String[] auswahl = {"Nummer","Nachname","Vorname","PLZ","Ort","Strasse","Telefon",
                                "Email","Altersgruppe","Bankverbindung","Funktion"};

            for(int zl = 0; zl< 11; zl++) {
                while(ergebnis.next() == true)
                {
                    for(int sp = 0; sp <= 11; ++sp) {
                        jTable1.setValueAt(ergebnis.getString(auswahl[sp]), zl, sp);
                        System.out.println(ergebnis.getString(auswahl[sp]));
                    }

                }
            }
            
        } catch(Exception e) {
            System.err.println("Nicht gefunden    " + e);
        }
        
        
    }

leider funktioniert es nicht so ganz wie ich es mir vorgestellt habe. es wird nur die zweite zeile der mysql tabelle in das jtable geschrieben (in die erste zeile des jtables) die mysql tabelle hat aber 3 zeilen und 11 spalten.

was mach ich falsch?

danke im voraus!
 

André Uhres

Top Contributor
Code:
/*
 * TableFromDatabase.java
 */
import java.awt.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableFromDatabase extends JFrame {
    private String databaseName;
    private String databaseURL = "jdbc:odbc:test";
    private final String DATABASE_USER = "root";
    private final String USER_PASSWORD = "sql";
    public TableFromDatabase() {
        Vector<String> columnNames = new Vector<String>();
        Vector<Vector> data = new Vector<Vector>();
        try {
            //  Connect to the Database
            String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
            Class.forName( driver );
            Connection connection = DriverManager.getConnection(databaseURL, DATABASE_USER, USER_PASSWORD);
            //  Read data from a table
            String sql = "Select * from testuhrand";
            Statement stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery( sql );
            ResultSetMetaData md = rs.getMetaData();
            int columns = md.getColumnCount();
            //  Get column names
            for (int i = 1; i <= columns; i++) {
                columnNames.addElement( md.getColumnName(i) );
            }
            //  Get row data
            while (rs.next()) {
                Vector<Object> row = new Vector<Object>(columns);
                
                for (int i = 1; i <= columns; i++) {
                    row.addElement( rs.getObject(i) );
                }
                data.addElement( row );
            }
            rs.close();
            stmt.close();
        } catch(Exception e) {
            System.out.println( e );
        }
        //  Create table with database data
        JTable table = new JTable(data, columnNames);
        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
        JPanel buttonPanel = new JPanel();
        getContentPane().add( buttonPanel, BorderLayout.SOUTH );
    }
    public static void main(String[] args) {
        TableFromDatabase frame = new TableFromDatabase();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible(true);
    }
}
 
G

Guest

Gast
ok. ich habe es jetzt anders gelöst.

Code:
    public void Datenbank() 
    {
        java.sql.Connection verbindung;
        String db;
        String user = io.Offnen(5);
        String password = io.Offnen(6);
        
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Treiber geladen");
            
            verbindung = null;
            db = "jdbc:mysql://localhost/tms1";
            verbindung = java.sql.DriverManager.getConnection(db,user, password);
            java.sql.Statement stm = verbindung.createStatement();
            
            String sql = "SELECT * from mitglieder ORDER BY nummer";
            java.sql.ResultSet ergebnis = stm.executeQuery(sql);
            java.sql.ResultSetMetaData md = ergebnis.getMetaData();
            String[] auswahl = {"Nummer","Nachname","Vorname","PLZ","Ort","Strasse","Telefon",
                                "Email","Altersgruppe","Bankverbindung","Funktion"};

            int start = 1;
            for(int zl = 0; zl< 60; zl++) { 
                    jProgressBar1.setIndeterminate(true);
                    jProgressBar1.setValue(10*zl);
                    jProgressBar1.setIndeterminate(false);
                    ergebnis.next();
                    for(int sp = 0; sp <= 10; ++sp) {
                        jTable1.setValueAt(ergebnis.getString(auswahl[sp]), zl, sp);
                    }
            }
        } catch(Exception e) {
            System.err.println("Nicht gefunden    " + e);
        }
    }

jetzt habe ich aber ein weiteres problem: wenn ich eine zu große datenbank einlese (also eine tabelle mit vielen zeilen), dann pass diese ja nich mehr rein und ich bekomme eine ArrayIndexOutOfBoundsException, weil das JTable einfach zu wenig zeilen hat.

wie füge ich jetzt einen neue zeile in das JTable ein?

das jtable wurde mit netbeans erstellt.

danke im voraus
 

bertram

Mitglied
Guten Tag,

ich schreibe gerade ein Programm in Java, mit dem auf eine MySQL Datenbank zugreife.
In einem Teil des Programms, fülle ich eine JTable mit den Daten einer Tabelle, aus der MySQL Datenbank.

Ich habe das so gelöst:

Code:
import java.awt.*;
import java.sql.*;
import java.io.*;
import java.util.*;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class Auftragsuebersicht extends javax.swing.JFrame 
{
     String hostname="***.***.***.***";
     String port="****";
     String dbname="****";
     String user="****";
     String pw="****";
     Connection conn=null;
     /** Creates new form Auftragsuebersicht */
     public Auftragsuebersicht()
     {
         setTitle("Auftragsuebersicht");
         setSize(800,600);
         Vector columnNames = new Vector();
         Vector data = new Vector();
         Vector columntype = new Vector();
         Vector columnindex = new Vector();
         try
         {
             Class.forName("com.mysql.jdbc.Driver").newInstance();
             String url="jdbc:mysql://"+hostname+":"+port+"/"+dbname;
             conn=DriverManager.getConnection(url,user,pw);
          
             String sql ="SELECT * FROM alle_auftraege";
             Statement stmt=conn.createStatement();
             ResultSet rs=stmt.executeQuery(sql);
             ResultSetMetaData rsmd=rs.getMetaData();
             int columns=rsmd.getColumnCount();
             for (int i = 1; i <= columns; i++)
             {
                 columnNames.addElement( rsmd.getColumnName(i) );
             }
             while (rs.next()) 
             {
                 Vector<Object> row = new Vector<Object>(columns);
                 for (int i = 1; i <= columns; i++) 
                 {
                     row.addElement( rs.getObject(i) );
                 }
                 data.addElement( row );
             }
             rs.close();
             stmt.close();
         }
         catch(Exception e)
         {
             System.out.println( e );
         }
         JTable table = new JTable(data, columnNames);
         JScrollPane scrollPane = new JScrollPane( table );
         table.setAutoscrolls(true);
         table.setEnabled(true);
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         getContentPane().add( scrollPane );
         JPanel buttonPanel = new JPanel();
         getContentPane().add( buttonPanel, BorderLayout.SOUTH );
     }
                       
     public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Auftragsuebersicht().setVisible(true);
            }
        });
    }                 
}

Das Programm läuft soweit auch, es holt sich die Daten aus der Datenbank und füllt anschließend die JTable damit.

Es gibt nur ein kleines Problem, und zwar sind einige Spalten aus der Tabelle als boolean deklariert,
diese werden bislang mit "true" und "false" in einem TextFeld in der JTable dargetsellt.
Mein Ziel ist es, das die Spalten, bei denen ein boolean Wert auftritt eine checkbox erscheint.

Mir wurde schon gesagt, das ich es mit TableModel oder TableCellRenderer versuchen soll.

Ich habe mir auch schon das tutorial durchgelesen, und auch eine JTable erzeugt in der boolean Werte in einer Checkbox dargestellt werden.

Hier der Code von meiner Versuchs JTable:

Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.util.Date;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class NewJFrame extends javax.swing.JFrame
{
     public NewJFrame()
     {
         initComponents();
     }
     public static void main( String[] args )
     {
         Model model = new Model();
         JTable table = new JTable( model );
         JFrame frame = new JFrame( "Demo" );
         frame.getContentPane().add( new JScrollPane( table ) );
         frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
         frame.pack();
         frame.setVisible( true );
     }
}
class Model extends AbstractTableModel
{
     private String[] strings;
     private int[] integers;
     private double[] doubles;
     private boolean[] booleans;
    
     public Model()
     {
         strings = new String[]{ "hallo", "ich", "bin", "eine", "Demo" };
         integers = new int[]{ 1, 2, 3, 4, 5 };
         doubles = new double[]{ 1.2, 3.4, 5.6, 7.8, 9.11 };
         booleans = new boolean[]{ true, false, false, true, true };
     }
      
      // Die Anzahl Columns
     public int getColumnCount()
     {
         return 4;
     }
      
     // Die Anzahl Rows
     public int getRowCount()
     {
         return 5;
     }
     
     // Die Titel der einzelnen Columns
     public String getColumnName(int column)
     {
         switch( column )
         {
             case 0: return "String";
             case 1: return "Integer";
             case 2: return "Double";
             case 3: return "Boolean";
             default: return null;
         }
     }
   
     // Der Wert der Zelle (rowIndex, columnIndex)
     public Object getValueAt(int rowIndex, int columnIndex) 
     {
         switch( columnIndex )
         {
             case 0: return strings[ rowIndex ];
             case 1: return new Integer( integers[ rowIndex ] );
             case 2: return new Double( doubles[ rowIndex ] );
             case 3: return new Boolean( booleans[ rowIndex ] );
             default: return null;
          }
     }

     // Eine Angabe, welchen Typ von Objekten in den Columns angezeigt werden soll
     public Class getColumnClass(int columnIndex)
     {
         switch( columnIndex )
         {
             case 0: return String.class;
             case 1: return Integer.class;
             case 2: return Double.class;
             case 3: return Boolean.class;
             default: return null;
         }
     }
      
     // Jede Zelle ist editierbar
     public boolean isCellEditable(int rowIndex, int columnIndex)
     {
         return true;
     }
   
     // Wird aufgerufen, falls der Wert einer Zelle verändert wurde
     public void setValueAt(Object aValue, int rowIndex, int columnIndex)
     {
         switch( columnIndex )
         {
             case 0:
             strings[ rowIndex ] = aValue.toString();
             break;
             case 1:
             integers[ rowIndex ] = ((Integer)aValue).intValue();
             break;
             case 2:
             doubles[ rowIndex ] = ((Double)aValue).doubleValue();
             break;
             case 3:
             booleans[ rowIndex ] = ((Boolean)aValue).booleanValue();
         }
     }
}

Mein größtes Problem ist vor allem, das ich nicht weiss, wie diese beiden Programme am besten kombinieren kann.

Freue mich über jeden Lösungsvorschlag.

Schon einmal vielen Dank im voraus.

MfG

bertram
 

André Uhres

Top Contributor
Du brauchst erstmal ein DefaultTableModel (aus dem package javax.swing.table):
Code:
   private DefaultTableModel model;
Dann musst du festlegen welchen Typ jede einzelne Spalte hat (String, Boolean, Integer, ...).
Du kannst z.B. einen Array "types" dafür benutzen:
Code:
   private Class[] types = new Class [] {
        String.class, Boolean.class, String.class, Integer.class, String.class
    };
Das DefaultTableModel wird dann so erzeugt:
Code:
       model = new DefaultTableModel(data, columnNames) {
            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        };

Und die JTable so:
Code:
       JTable table = new JTable(model);

Dann werden die Booleans automatisch als JCheckBox dargestellt :wink:
 
D

DonRu

Gast
Ich schreibe wie die meisten hier vor mir ein Programm welches Daten aus einer Mysql Datenbank liest. Ich lese das ResultSet mit ner Schleife in die jtable und gut ist.
Aber ein Problem bekomme ich wenn ich die jtable wieder in die Datenbank speichern will.

Irgendwie klappt es weder mit ner schleife aus der jtable wieder ein resulstset zu machen und es in die db zu schieben. Und auch ansonsten verbeiß ich mich gerade in nichts gutem. Vieleicht hat da jemand einen Denkanstoß, etwas Code oder ne andere Idee.

Gruß DonRu
 
D

DonRu

Gast
ja aber wenn du ne ganze db speichern willst ist das eine unsinnige menge an qrys die du ausführst. Am sinnvollsten ist es wenn man die ganze db in einer qry rüberschieben kann. Da liegt nun mein Problem.
 
G

Gast

Gast
zum teil. Es geht darum ne Menge daten in die jtable zu tippen und den schmu dann auf einmal in die db zu schieben.
Aber es muss doch möglich sein genau wie das auslesen aus der db mit 1 qry es wieder mit 1 qry hinein zu schieben. Aber daran scheitert es bei mir...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
thet1983 Swing JTable mit MySQL Datenbank AWT, Swing, JavaFX & SWT 14
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
thet1983 Swing MySQL >> JTable AWT, Swing, JavaFX & SWT 5
L JTable aus MySQL DB updaten - Live AWT, Swing, JavaFX & SWT 7
H JTable mySQL Update AWT, Swing, JavaFX & SWT 8
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
K Swing JTable updaten AWT, Swing, JavaFX & SWT 9
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
O JTable linksbündig drucken (nicht der Zelleninhalt) AWT, Swing, JavaFX & SWT 2
Crazynet xls Datei in JTable AWT, Swing, JavaFX & SWT 3
O JTable ohne Rahmen printen AWT, Swing, JavaFX & SWT 3
L Swing JTable refresht die Column Namen nicht AWT, Swing, JavaFX & SWT 0
K JTable komplett durch andere ersetzen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben