tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
513
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Genius2 Genius2 ist offline Rookie
    Registriert seit
    Apr 2009
    Beiträge
    8
    Hallo Liebe Java Profis,

    Ich habe ein kleines aber verzwicktes Problem mit einem Java Programm:

    Ich habe diesen Code geschrieben, um Daten aus einer SQL Datenbank in eine JTable reinzukopieren.

    Nun habe ich aber das Problem das der Erste Datensatz der SQL Tabelle nicht in die JTable eingetragen wird.

    Ich hab schon ne Menge rumprobiert aber vielleicht bin ich auch einfach blind.

    Hier mein Code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    
    package TableBrowserTest;
     
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
     
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.border.BevelBorder;
    import javax.swing.table.DefaultTableModel;
     
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.Statement;
     
    import TableBrowser.TableBrowserConnect;
     
    public class TableBrowser extends JFrame {
     
        public static void main(String[] args) {
            new TableBrowser();
        }
     
        final DefaultTableModel data = new DefaultTableModel(); 
     
        final JTextField t_user = new JTextField(20);
        final JTextField t_pw = new JTextField(20);
        final JTextField t_db = new JTextField(20);
        final JTextField t_table = new JTextField(20);
     
        JButton b_connect = new JButton("connect");
     
        JLabel l_user = new JLabel("user");
        JLabel l_pw = new JLabel("pw");
        JLabel l_db = new JLabel("db");
        JLabel l_table = new JLabel("table");
        JLabel l_empty = new JLabel(" ");
     
        public void updateData() {
            /* Verbindung zur DB herstellen, Statement initialisieren */
     
            try {
                Class.forName("com.mysql.jdbc.Driver");
                java.sql.Connection con = DriverManager.getConnection(
                        "jdbc:mysql://localhost/" + t_db.getText(), t_user
                                .getText(), t_pw.getText());
     
                /* SQL-Query ausführen und ResultSet zurückholen */
                java.sql.Statement st = con.createStatement();
                String sql = "select* from " + t_table.getText();
                ResultSet rs = st.executeQuery(sql);
     
                ResultSetMetaData rsmd = null;
                int clmCnt = -1;
     
                rsmd = rs.getMetaData();
                clmCnt = rsmd.getColumnCount();
     
                if (rsmd == null || clmCnt == -1) {
                    throw new RuntimeException("rsmd is null");
                }
     
                try {
                                rs.first();
                    rs.last();
                    int rowCnt = rs.getRow();
                    rs.first();
     
                    Object[][] odata = new Object[rowCnt][clmCnt];
                    Object[] clmHeaders = new Object[clmCnt];
                    for (int i = 1; i <= clmCnt; i++) {
                        clmHeaders[i - 1] = rsmd.getColumnName(i);
                    }
     
                    int row = 0;
                    while (rs.next()) {
                        for (int j = 1; j <= clmCnt; j++) {
                            
                            System.out.print(rs.getString(j) + " ");
                            odata[row][j - 1] = rs.getString(j);
                        }
                        row++;
                        System.out.println();
                    }
                    data.setDataVector(odata, clmHeaders);
     
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
                
                data.fireTableStructureChanged();
                data.fireTableDataChanged();
                
            } catch (ClassNotFoundException e) {
                System.err.println("DB-Driver not found!");
                System.exit(1);
            } catch (SQLException e) {
                System.err.println("SQL-Error:" + e.getMessage());
                System.exit(1);
            }
        }
     
        public TableBrowser() {
            JFrame frame = new JFrame("Tabelle");
     
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
     
            JTable tableView = new JTable(data);
     
            JScrollPane scrollpane = new JScrollPane(tableView);
            scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));
            scrollpane.setPreferredSize(new Dimension(430, 200));
     
            // ***********************************************************
            // TableBrowserConnect
            JPanel conpane = new JPanel(new GridLayout(2, 5));
     
            conpane.add(l_user);
            conpane.add(l_pw);
            conpane.add(l_db);
            conpane.add(l_table);
            conpane.add(l_empty);
     
            conpane.add(t_user);
            conpane.add(t_pw);
            conpane.add(t_db);
            conpane.add(t_table);
     
            conpane.add(b_connect);
     
            b_connect.addActionListener(new ActionListener() {
                public void actionPerformed(final ActionEvent e) {
                    updateData();
                }
            });
     
            // Ende von TableBrowserConnect
            // ***********************************************************
     
            Container content = getContentPane();
            content.setLayout(new BorderLayout());
     
            content.add(conpane, BorderLayout.NORTH);
            content.add(scrollpane, BorderLayout.SOUTH);
     
            setSize(550, 300);
            setVisible(true);
        }
    }

    Das kommt beim ausführen des Programms raus:

    http://s1b.directupload.net/images/090423/mzhhowfk.jpg

    Und diese Daten sind in der Datenbank eigentlich drin:

    http://s10b.directupload.net/images/090423/kc7mpuz4.jpg

    Man sieht das die Erste Zeile der SQL Datenbank nicht in die JTable übertragen wird.

    Es hat auch nix direkt mit dem Eintragen ins JTable zu tun denn auf der Console kommen auch nur diese beiden Datensätze an die auch ins JTable eingetragen sind:

    http://s10.directupload.net/images/090423/6roh7cbo.jpg


    Ich würde mich freuen wenn mir jemand helfen könnte den Fehler zu lokalisieren.
    Und habt bitte Nachsicht ich bin auf dem Gebiet noch Anfänger.

    Danke Euch im Vorraus
     

  2. #2
    THMD THMD ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Beiträge
    122
    Hallo,

    du bewegst den Cursor durch den Aufruf von first() schon auf den ersten Datensatz. Durch den Aufruf von next() in der while-Schleife schaltest du dann direkt weiter, womit der zweite Datensatz als erster ausgelesen wird. Damit das mit deiner while-Schleife funktioniert, musst du den Cursor vor dem ersten Datensatz platzieren. Die dazugehörige Methode lautet beforeFirst().

    hth
    THMD
     
    If Java had true garbage collection, most programs would delete themselves upon execution. (Robert Sewell)

  3. #3
    Genius2 Genius2 ist offline Rookie
    Registriert seit
    Apr 2009
    Beiträge
    8
    Wow Super vielen Dank.

    Wie gesagt bin noch Blutiger Anfänger

    lg

    /Erledigt
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 14.11.08, 14:59
  2. Antworten: 2
    Letzter Beitrag: 14.04.06, 11:26
  3. Antworten: 16
    Letzter Beitrag: 16.12.05, 17:43
  4. Antworten: 8
    Letzter Beitrag: 21.07.05, 09:40
  5. [MySQL] Problem beim Daten einfügen
    Von SuperSonik im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 23.05.05, 20:42

Stichworte