Java Abfrage über GUI, Daten hinzufügen

NichtExpert

Bekanntes Mitglied
Hallo,
ich will wie als Überschrift erwähnt, eine zeile in meiner Gui im Table der SQL Datenbank hinzufügen.
Dazu habe ich mir einen button erstellt, der auf knopfdruck eine zeile hinzufügen soll.
Den button habe ich erstellt, Frage ist, ob der Ansatz so richtig ist:

JButton btnadd = new JButton("Zeile hinzufügen"); //Button hinzugefügt
btnadd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
model.addRow(Object[] ); // IST DIESER ANSATZ RICHTIG???
}
});
btnadd.setBounds(197, 180, 129, 23 );
getContentPane().add(btnadd);
 

lam_tr

Top Contributor
Ja prinzipiell spricht nichts dagegen oder? Ich hätt das auch so gemacht, eventuell noch in ein UIThread gepackt damit, die UI nicht einfriert wenn das Insert nicht auf Anhieb klappt.
 

NichtExpert

Bekanntes Mitglied
Wie greifst du auf die Datenbank?
Ähhmmm, ich schicke mal den Code

Java:
package Test_sql;

import datenbank.SQL_GUI_Connection_personalie;

import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Test_Daten_hinzufügen extends JFrame {

    /**
     * Launch the application
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Test_Daten_hinzufügen frame = null;
                try {
                    frame = new Test_Daten_hinzufügen();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                frame.setVisible(true);                                                                                 // Frame sichtbar
            }
        });
    }

    /**
     * Create the Frame
     */
    public Test_Daten_hinzufügen() throws SQLException {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                                                                 // Run beenden
        setBounds(100, 100, 580, 242 );                                                            // Frame größe
        setTitle("Tutorial-Beispiel");                                                                                  // Frame Überschrift
        getContentPane().setLayout(null);

        /**
         * Scrollpane
         */
        JScrollPane scrollPane = new JScrollPane();                                                                     // ScrollPane erstellt
        scrollPane.setBounds(64, 44, 440, 89);                                                      // Größe Scrollpane
        getContentPane().add(scrollPane);                                                                               // Scrollpane dem getContentpane hinzugefügt

        /**
         * Table
         */
        JTable table = new JTable();                                                                                    // Table erstellt
        scrollPane.setViewportView(table);                                                                              // scrollpane dem table (tabelle) hinzugefügt

        /**
         * Model für Table
         */
        DefaultTableModel model = (DefaultTableModel)table.getModel();                                                  // Model erstellt
        model.addColumn("ID");                                                                            // Überschrift Table (tabelle-spalten)
        model.addColumn("Firstname");                                                                     // Überschrift table (tabelle-spalten)
        model.addColumn("Lastname");                                                                      // Überschrift table (tabelle-spalten)
        model.addColumn("Sport");                                                                         // Überschrift table (tabelle-spalten)
        model.addColumn("# of years");                                                                    // Überschrift table (tabelle-spalten)
        model.addColumn("vegetarian");                                                                    // Überschrift table (tabelle-spalten)


        JLabel lblFilter = new JLabel("Filter :");                                                                 // label erstellt
        lblFilter.setBounds(158, 147, 72, 14);                                                      // Label Größe
        getContentPane().add(lblFilter);                                                                                // label dem getContentPane zugeordnet

        /**
         * Filter
         */
        final JTextField txtFilter = new JTextField();                                                                  // Textfield erstellt
        txtFilter.setBounds(197, 144, 129, 20);                                                     // Textfield erstellt
        getContentPane().add(txtFilter);                                                                                // Textfielf dem GetContentpane zugeordnet

        /**
         * Header Sort
         */
        final TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
        table.setRowSorter(sorter);

        /**
         * Filter-Button  (OK-Button)
         */
        JButton btnOK = new JButton("OK");                                                                         // button erstellt, Button-Schrift="OK"
        btnOK.addActionListener(new ActionListener() {                                                                  // Befehl, click auf button hinzugefügt
            @Override                                                                                                   //
            public void actionPerformed(ActionEvent actionEvent) {                                                      //
                String expr = txtFilter.getText();                                                                      // String expr = textfield (bekommt text von dort)
                sorter.setRowFilter(RowFilter.regexFilter(expr));                                                       //
                sorter.setSortKeys(null);                                                                               //
            }
        });
        btnOK.setBounds(336, 144, 59, 23);                                                          // Button Größe
        getContentPane().add(btnOK);                                                                                    // Button dem getContnetPane zugeordnet
/**
 * *********************************************************************************************************************
 */
        JButton btnadd = new JButton("Zeile hinzufügen");
        btnadd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
            model.addRow();                                    // IST DIESER ANSATZ RICHTIG???
            }
        });
        btnadd.setBounds(197, 180, 129, 23 );
        getContentPane().add(btnadd);

/**
 * *********************************************************************************************************************
  */
        Connection connect = null;
        Statement s = null;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");                                                                  // SQL Treiber

            connect = DriverManager.getConnection("jdbc:mysql://localhost/test","till","Tillerni02");     // Connection zur Datenbank (Pfad + nutzername + passwort der Datenbank)

            s = connect.createStatement();

            String sql = "SELECT * FROM personalie ORDER BY ID";                                                        // Auswahl Tabelle, Anzeigekriterien

            ResultSet rec = s.executeQuery(sql);
            int row = 0;
            while ((rec!=null) && (rec.next()))
            {
                model.addRow(new Object[0]);
                model.setValueAt(rec.getString("ID"), row, 0);                                               // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Firstname"), row, 1);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Lastname"), row, 2);                                         // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Sport"), row, 3);                                            // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getFloat("# of years"), row, 4);                                        // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("vegetarian"), row, 5);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                row++;
            }

            rec.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            JOptionPane.showMessageDialog(null, e.getMessage());
            e.printStackTrace();
        }


        try {
            if (s != null) {
                s.close();
                connect.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
 

lam_tr

Top Contributor
Ähhmmm, ich schicke mal den Code

Java:
package Test_sql;

import datenbank.SQL_GUI_Connection_personalie;

import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Test_Daten_hinzufügen extends JFrame {

    /**
     * Launch the application
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Test_Daten_hinzufügen frame = null;
                try {
                    frame = new Test_Daten_hinzufügen();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                frame.setVisible(true);                                                                                 // Frame sichtbar
            }
        });
    }

    /**
     * Create the Frame
     */
    public Test_Daten_hinzufügen() throws SQLException {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                                                                 // Run beenden
        setBounds(100, 100, 580, 242 );                                                            // Frame größe
        setTitle("Tutorial-Beispiel");                                                                                  // Frame Überschrift
        getContentPane().setLayout(null);

        /**
         * Scrollpane
         */
        JScrollPane scrollPane = new JScrollPane();                                                                     // ScrollPane erstellt
        scrollPane.setBounds(64, 44, 440, 89);                                                      // Größe Scrollpane
        getContentPane().add(scrollPane);                                                                               // Scrollpane dem getContentpane hinzugefügt

        /**
         * Table
         */
        JTable table = new JTable();                                                                                    // Table erstellt
        scrollPane.setViewportView(table);                                                                              // scrollpane dem table (tabelle) hinzugefügt

        /**
         * Model für Table
         */
        DefaultTableModel model = (DefaultTableModel)table.getModel();                                                  // Model erstellt
        model.addColumn("ID");                                                                            // Überschrift Table (tabelle-spalten)
        model.addColumn("Firstname");                                                                     // Überschrift table (tabelle-spalten)
        model.addColumn("Lastname");                                                                      // Überschrift table (tabelle-spalten)
        model.addColumn("Sport");                                                                         // Überschrift table (tabelle-spalten)
        model.addColumn("# of years");                                                                    // Überschrift table (tabelle-spalten)
        model.addColumn("vegetarian");                                                                    // Überschrift table (tabelle-spalten)


        JLabel lblFilter = new JLabel("Filter :");                                                                 // label erstellt
        lblFilter.setBounds(158, 147, 72, 14);                                                      // Label Größe
        getContentPane().add(lblFilter);                                                                                // label dem getContentPane zugeordnet

        /**
         * Filter
         */
        final JTextField txtFilter = new JTextField();                                                                  // Textfield erstellt
        txtFilter.setBounds(197, 144, 129, 20);                                                     // Textfield erstellt
        getContentPane().add(txtFilter);                                                                                // Textfielf dem GetContentpane zugeordnet

        /**
         * Header Sort
         */
        final TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
        table.setRowSorter(sorter);

        /**
         * Filter-Button  (OK-Button)
         */
        JButton btnOK = new JButton("OK");                                                                         // button erstellt, Button-Schrift="OK"
        btnOK.addActionListener(new ActionListener() {                                                                  // Befehl, click auf button hinzugefügt
            @Override                                                                                                   //
            public void actionPerformed(ActionEvent actionEvent) {                                                      //
                String expr = txtFilter.getText();                                                                      // String expr = textfield (bekommt text von dort)
                sorter.setRowFilter(RowFilter.regexFilter(expr));                                                       //
                sorter.setSortKeys(null);                                                                               //
            }
        });
        btnOK.setBounds(336, 144, 59, 23);                                                          // Button Größe
        getContentPane().add(btnOK);                                                                                    // Button dem getContnetPane zugeordnet
/**
* *********************************************************************************************************************
*/
        JButton btnadd = new JButton("Zeile hinzufügen");
        btnadd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
            model.addRow();                                    // IST DIESER ANSATZ RICHTIG???
            }
        });
        btnadd.setBounds(197, 180, 129, 23 );
        getContentPane().add(btnadd);

/**
* *********************************************************************************************************************
  */
        Connection connect = null;
        Statement s = null;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");                                                                  // SQL Treiber

            connect = DriverManager.getConnection("jdbc:mysql://localhost/test","till","Tillerni02");     // Connection zur Datenbank (Pfad + nutzername + passwort der Datenbank)

            s = connect.createStatement();

            String sql = "SELECT * FROM personalie ORDER BY ID";                                                        // Auswahl Tabelle, Anzeigekriterien

            ResultSet rec = s.executeQuery(sql);
            int row = 0;
            while ((rec!=null) && (rec.next()))
            {
                model.addRow(new Object[0]);
                model.setValueAt(rec.getString("ID"), row, 0);                                               // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Firstname"), row, 1);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Lastname"), row, 2);                                         // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Sport"), row, 3);                                            // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getFloat("# of years"), row, 4);                                        // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("vegetarian"), row, 5);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                row++;
            }

            rec.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            JOptionPane.showMessageDialog(null, e.getMessage());
            e.printStackTrace();
        }


        try {
            if (s != null) {
                s.close();
                connect.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
Ich kenne mich ehrlich gesagt mit Swing nicht viel aus, aber dem Code nach von dieser Seite https://stackoverflow.com/questions/3549206/how-to-add-row-in-jtable, kann ich über diesen Weg realisieren.

Code:
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addRow(new Object[]{"Column 1", "Column 2", "Column 3"});

Das entspricht immer eine Zeile im JTable.

Das mit dem Zeile hinzufügen ist damit Datenbank oder JTable gemeint?

Für Datenbank würde ich ein PreparedStatement mit dem INSERT SQL machen, siehe hier
.
 

NichtExpert

Bekanntes Mitglied
Also eine zelle in der GUI sprich JTable aktualisiert sich die zeile. Ich schicke mal den Code mit, damit Anfänger, falls sie auf diesen Thread stoßen wissen was ich getan habe.
Code:
JButton btnadd = new JButton("Zeile hinzufügen");
        btnadd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
            model.addRow(new Object[] {});                                    // Es wird eine zeile (addRow) hinzugefügt ohne Daten (steht in der "{}")
            }
        });
        btnadd.setBounds(336, 180, 129, 23 );
        getContentPane().add(btnadd);
 

lam_tr

Top Contributor
Also eine zelle in der GUI sprich JTable aktualisiert sich die zeile. Ich schicke mal den Code mit, damit Anfänger, falls sie auf diesen Thread stoßen wissen was ich getan habe.
Code:
JButton btnadd = new JButton("Zeile hinzufügen");
        btnadd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
            model.addRow(new Object[] {});                                    // Es wird eine zeile (addRow) hinzugefügt ohne Daten (steht in der "{}")
            }
        });
        btnadd.setBounds(336, 180, 129, 23 );
        getContentPane().add(btnadd);

Also die Zeile von dir erstelt eine Zeile im JTable, aber ohne Daten. Je nachdem wieviele Spalten du hast, muss du noch Werte in das Array setzen.

Geplant war, dass sich die zeile in der Datenbank als auch in der GUI aktualisiert.
Dafür beötigst du dann einen Service der die Connection öffnet, schließt und insert vorbereitet.

Bleibst du irgendwo stecken?
 

NichtExpert

Bekanntes Mitglied
Also die Zeile von dir erstelt eine Zeile im JTable, aber ohne Daten. Je nachdem wieviele Spalten du hast, muss du noch Werte in das Array setzen.
Versucht habe ich auch, die Spalte ID, automatsich um 1 zu erhöhen. also von der letzten ID zahl.
Rausgekommen ist aber nur ein Integer wert, den ich auf die nächste ID-zahl gesetzt habe und dann ID++

Java:
final int[] ID = {6}; // In der Datenbank gibt es momentan nur 5 Zeilen (bis Id zahl 5)

        JButton btnadd = new JButton("Zeile hinzufügen");
        btnadd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
            model.addRow(new Object[] {ID[0]++}); // fügt zeile hinzu und setzt ID auf 6, danach immer ++ (7, 8, 9, ...)                                   // { textField.getText }
            }                                                                        //  { ID[0]++ }  (integer zahl auf 6 gesetzt, addiert dann immer die Zahl um 1)
        });
        btnadd.setBounds(336, 180, 129, 23 );
        getContentPane().add(btnadd);
 

NichtExpert

Bekanntes Mitglied
Irgendwie klappt es nicht. Aber im Grunde genommen mache ich doch nur eine neue try...catch:
Java:
try {
            Class.forName("com.mysql.cj.jdbc.Driver");                                                                  // SQL Treiber

            connect = DriverManager.getConnection("jdbc:mysql://localhost/test","test","test");     // Connection zur Datenbank (Pfad + nutzername + passwort der Datenbank)

            s = connect.createStatement();

            String sql = "SELECT * FROM personalie ORDER BY ID";                                                        // Auswahl Tabelle, Anzeigekriterien


            ResultSet rec = s.executeQuery(sql);
             int row = 0;
            while ((rec!=null) && (rec.next()))
            {
                model.addRow(new Object[0]);
                model.setValueAt(rec.getString("ID"), row, 0);                                               // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Firstname"), row, 1);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Lastname"), row, 2);                                         // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Sport"), row, 3);                                            // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getFloat("# of years"), row, 4);                                        // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("vegetarian"), row, 5);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                row++;


            }

            rec.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            JOptionPane.showMessageDialog(null, e.getMessage());
            e.printStackTrace();
        }



        try {
            if (s != null) {
                s.close();
                connect.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

und füge dort meine "SQL_INSERT" -Anweisung durch. Oder fehlt mir noch was ganz entscheidenes?
 

lam_tr

Top Contributor
Irgendwie klappt es nicht. Aber im Grunde genommen mache ich doch nur eine neue try...catch:
Java:
try {
            Class.forName("com.mysql.cj.jdbc.Driver");                                                                  // SQL Treiber

            connect = DriverManager.getConnection("jdbc:mysql://localhost/test","test","test");     // Connection zur Datenbank (Pfad + nutzername + passwort der Datenbank)

            s = connect.createStatement();

            String sql = "SELECT * FROM personalie ORDER BY ID";                                                        // Auswahl Tabelle, Anzeigekriterien


            ResultSet rec = s.executeQuery(sql);
             int row = 0;
            while ((rec!=null) && (rec.next()))
            {
                model.addRow(new Object[0]);
                model.setValueAt(rec.getString("ID"), row, 0);                                               // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Firstname"), row, 1);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Lastname"), row, 2);                                         // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Sport"), row, 3);                                            // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getFloat("# of years"), row, 4);                                        // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("vegetarian"), row, 5);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                row++;


            }

            rec.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            JOptionPane.showMessageDialog(null, e.getMessage());
            e.printStackTrace();
        }



        try {
            if (s != null) {
                s.close();
                connect.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

und füge dort meine "SQL_INSERT" -Anweisung durch. Oder fehlt mir noch was ganz entscheidenes?

Was bekommst du wenn du das hier machst

Code:
 while ((rec!=null) && (rec.next()))
            {
                model.addRow(new Object[]{rec.getString("ID"),rec.getString("Firstname"), rec.getString("Lastname"), ....});
                row++;
            }
 

NichtExpert

Bekanntes Mitglied
Was bekommst du wenn du das hier machst
Soll ich das durch :
Java:
while ((rec!=null) && (rec.next()))
            {
                model.addRow(new Object[0]);
                model.setValueAt(rec.getString("ID"), row, 0);                                               // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Firstname"), row, 1);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Lastname"), row, 2);                                         // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Sport"), row, 3);                                            // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getFloat("# of years"), row, 4);                                        // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("vegetarian"), row, 5);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                row++;
ersetzen oder darunter hinzufügen?
 

NichtExpert

Bekanntes Mitglied
Ich bekomme immer wieder eine Fehlermeldung:
java.sql.SQLException: Operation not allowed after ResultSet closed

Auch wenn ich
Java:
rec.close();
weg mache.

Ich schätze mal es liegt an dem Teil:
Java:
while ((rec!=null) && (rec.next())) {
?
 

lam_tr

Top Contributor
Zeig mir mal den Stacktrace Ausdruck bitte. Und ich weiß nicht ob du Null Werte in das Modell übergeben kannst. Geben alle Aufrüfe etwas zurück?
 

NichtExpert

Bekanntes Mitglied
Zeig mir mal den Stacktrace Ausdruck bitte.
Java:
java.sql.SQLException: Operation not allowed after ResultSet closed
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.result.ResultSetImpl.checkClosed(ResultSetImpl.java:437)
    at com.mysql.cj.jdbc.result.ResultSetImpl.findColumn(ResultSetImpl.java:544)
    at com.mysql.cj.jdbc.result.ResultSetImpl.getString(ResultSetImpl.java:852)
    at Test_sql.Test_Daten_hinzufügen$3.actionPerformed(Test_Daten_hinzufügen.java:172)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:270)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6651)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6416)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 

NichtExpert

Bekanntes Mitglied
Und ich weiß nicht ob du Null Werte in das Modell übergeben kannst. Geben alle Aufrüfe etwas zurück?
Wenn ich den Teil enthalten lasse:
Java:
while ((rec!=null) && (rec.next())) {
                model.addRow(new Object[0]);
                model.setValueAt(rec.getString("ID"), row[0], 0);                                               // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Firstname"), row[0], 1);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Lastname"), row[0], 2);                                         // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("Sport"), row[0], 3);                                            // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getFloat("# of years"), row[0], 4);                                        // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                model.setValueAt(rec.getString("vegetarian"), row[0], 5);                                       // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
                row[0]++;
            }
Gibt er normal die GUI aus, und wenn ich es ausführe, kommt es dann zur Fehlermeldung.

Wenn ich den Teil:
Java:
model.addRow(new Object[]{rec.getString("ID"), rec.getString("Firstname"), rec.getString("Lastname"), rec.getString("Sport"), rec.getString("# of years"), rec.getString("Vegetarian")});
darunter einfüge, dasselbe Spiel.

Wenn ich aber den Teil lösche:
CODE=java]while ((rec!=null) && (rec.next())) {
model.addRow(new Object[0]);
model.setValueAt(rec.getString("ID"), row[0], 0); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getString("Firstname"), row[0], 1); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getString("Lastname"), row[0], 2); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getString("Sport"), row[0], 3); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getFloat("# of years"), row[0], 4); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getString("vegetarian"), row[0], 5); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
row[0]++;
}[/CODE]
und ersetze das durch:
Java:
model.addRow(new Object[]{rec.getString("ID"), rec.getString("Firstname"), rec.getString("Lastname"), rec.getString("Sport"), rec.getString("# of years"), rec.getString("Vegetarian")});
Dann wird der "Run" gestartet ohne Fehlermeldung. Die angezeigte GUI mit Table ist jedoch leer. Liegt logischerweise daran, dass der obige Code-Teil, den ich gestrichen habe, die Daten aus der SQL-Datenbank holt.
Klicke ich dann in der leeren table auf dem add-Button, kommt die eine Fehlermeldung.
 

lam_tr

Top Contributor
while ((rec!=null) && (rec.next())) {
model.addRow(new Object[0]);
model.setValueAt(rec.getString("ID"), row[0], 0); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getString("Firstname"), row[0], 1); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getString("Lastname"), row[0], 2); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getString("Sport"), row[0], 3); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getFloat("# of years"), row[0], 4); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
model.setValueAt(rec.getString("vegetarian"), row[0], 5); // spalten-name der SQL-Tabelle (muss richtig sein, sonst Fehler)
row[0]++;
}

Mir ist gerade das hier aufgefallen, dass du immer row[0] ansprichst und im Anschluss hoch inkrementierst. Macht das einen Sinn, ich verstehe das nicht. Es ist dann immer row[0] oder?
 

NichtExpert

Bekanntes Mitglied
Wenn cih row[0] ändere z.B. zu 1; 2; 3; ... . Dann kommt es zur fehlermeldung:
java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
 

lam_tr

Top Contributor
Code:
package validator;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

public class Test_Daten_hinzufügen extends JFrame {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    /**
     * Launch the application
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Test_Daten_hinzufügen frame = null;
                try {
                    frame = new Test_Daten_hinzufügen();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                frame.setVisible(true); // Frame sichtbar
            }
        });
    }

    /**
     * Create the Frame
     */
    public Test_Daten_hinzufügen() throws SQLException {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Run beenden
        setBounds(100, 100, 580, 242); // Frame größe
        setTitle("Tutorial-Beispiel"); // Frame Überschrift
        getContentPane().setLayout(null);

        /**
         * Scrollpane
         */
        JScrollPane scrollPane = new JScrollPane(); // ScrollPane erstellt
        scrollPane.setBounds(64, 44, 440, 89); // Größe Scrollpane
        getContentPane().add(scrollPane); // Scrollpane dem getContentpane hinzugefügt

        /**
         * Table
         */
        JTable table = new JTable(); // Table erstellt
        scrollPane.setViewportView(table); // scrollpane dem table (tabelle) hinzugefügt

        /**
         * Model für Table
         */
        DefaultTableModel model = (DefaultTableModel) table.getModel(); // Model erstellt
        model.addColumn("ID"); // Überschrift Table (tabelle-spalten)
        model.addColumn("Firstname"); // Überschrift table (tabelle-spalten)
        model.addColumn("Lastname"); // Überschrift table (tabelle-spalten)
        model.addColumn("Sport"); // Überschrift table (tabelle-spalten)
        model.addColumn("# of years"); // Überschrift table (tabelle-spalten)
        model.addColumn("vegetarian"); // Überschrift table (tabelle-spalten)

        JLabel lblFilter = new JLabel("Filter :"); // label erstellt
        lblFilter.setBounds(158, 147, 72, 14); // Label Größe
        getContentPane().add(lblFilter); // label dem getContentPane zugeordnet

        /**
         * Filter
         */
        final JTextField txtFilter = new JTextField(); // Textfield erstellt
        txtFilter.setBounds(197, 144, 129, 20); // Textfield erstellt
        getContentPane().add(txtFilter); // Textfielf dem GetContentpane zugeordnet

        /**
         * Header Sort
         */
        final TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
        table.setRowSorter(sorter);

        /**
         * Filter-Button (OK-Button)
         */
        JButton btnOK = new JButton("OK"); // button erstellt, Button-Schrift="OK"
        btnOK.addActionListener(new ActionListener() { // Befehl, click auf button hinzugefügt
            @Override //
            public void actionPerformed(ActionEvent actionEvent) { //
                String expr = txtFilter.getText(); // String expr = textfield (bekommt text von dort)
                sorter.setRowFilter(RowFilter.regexFilter(expr)); //
                sorter.setSortKeys(null); //
            }
        });
        btnOK.setBounds(336, 144, 59, 23); // Button Größe
        getContentPane().add(btnOK); // Button dem getContnetPane zugeordnet
        /**
         * *********************************************************************************************************************
         */
        JButton btnadd = new JButton("Zeile hinzufügen");
        btnadd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                model.addRow(new Object[] { "Test1", "Test2", "Test3", "Test4", "Test5", "Test6" });
            }
        });
        btnadd.setBounds(197, 180, 129, 23);
        getContentPane().add(btnadd);

        /**
         * *********************************************************************************************************************
         */
    }

}

Also das Hinzufügen der Row in die GUI das geht auf jede Fall, das ist nur ein Datenbank Zugriffsproblem. Da ich es selten per Hand mache, muss du mal die DB Pros hier mal nachfragen.

Nachtrag: In dem Beispiel von oracle wird das ResultSet nicht geclosed, sondern direkt das Statement, probier mal damit

Code:
public static void viewTable(Connection con, String dbName)

    throws SQLException {



    Statement stmt = null;

    String query =

        "select COF_NAME, SUP_ID, PRICE, " +

        "SALES, TOTAL " +

        "from " + dbName + ".COFFEES";



    try {

        stmt = con.createStatement();

        ResultSet rs = stmt.executeQuery(query);

        while (rs.next()) {

            String coffeeName = rs.getString("COF_NAME");

            int supplierID = rs.getInt("SUP_ID");

            float price = rs.getFloat("PRICE");

            int sales = rs.getInt("SALES");

            int total = rs.getInt("TOTAL");

            System.out.println(coffeeName + "\t" + supplierID +

                               "\t" + price + "\t" + sales +

                               "\t" + total);

        }

    } catch (SQLException e ) {

        JDBCTutorialUtilities.printSQLException(e);

    } finally {

        if (stmt != null) { stmt.close(); }

    }

}
 

lam_tr

Top Contributor
Kann es sein dass du Probleme mit dem Zugriff auf die Spalten hast. Versuche doch Spalte für Spalte abzurufen und nicht alle auf einmal.
 

NichtExpert

Bekanntes Mitglied
Es kommt dieselbe Fehlermeldung, ich probier nochmal was...
hat nichts gebracht, habe dahinter nochmal " row[0] " hinzugefügt.
Als Fehler wird immer
Java:
model.addRow(new Object[]{rec.getString("ID"), row[0]});
gesehen.
Als alle hintereinander waren, war die gesamte zeile der Fehler
Java:
model.addRow(new Object[]{rec.getString("ID"), rec.getString("Firstname"), rec.getString("Lastname"), rec.getString("Sport"), rec.getString("# of years
jetzt wird die erste zeile von dem hier als Fehler bemängelt
Java:
model.addRow(new Object[]{rec.getString("ID"), row[0]});
model.addRow(new Object[]{rec.getString("Firstname"), row[0]});
model.addRow(new Object[]{rec.getString("Lastname"), row[0]});
model.addRow(new Object[]{rec.getString("Sport"), row[0]});
model.addRow(new Object[]{rec.getString("# of years"), row[0]});
model.addRow(new Object[]{rec.getString("Vegetarian"), row[0]});

bedeutet, an dieser Stelle kommt es zum fehler. und er beendet das Programm
 

lam_tr

Top Contributor
Probiere doch zuerst mal das, bevor du in das model hinzufügst

System.out.println(rec.getString("ID"));
System.out.println(rec.getString("Firstname"));
System.out.println(rec.getString("Lastname"));
...

Schau mal ob der für alle Spalten einen Wert bekommt.
 

NichtExpert

Bekanntes Mitglied
Probiere doch zuerst mal das, bevor du in das model hinzufügst

System.out.println(rec.getString("ID"));
System.out.println(rec.getString("Firstname"));
System.out.println(rec.getString("Lastname"));
...

Schau mal ob der für alle Spalten einen Wert bekommt.
Die System.out.println-Methode ist nicht für GUI gedacht. Funktioniert nur in der GUI --> Das weißt du sicherlich.
Bevor ich mit GUI angefangen habe, habe ich natürlich mit der Konsolenausgabe angefangen.

Java:
package datenbank;

import java.sql.*;

public class MeineErsteAbfrage {

    static Connection con = null;
    static Statement stmt = null;
    static ResultSet rs = null;

    public static void main(String args[]) throws InstantiationException, IllegalAccessException, SQLException {
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
        }
        catch (ClassNotFoundException e){
            e.printStackTrace();
            System.exit(1);
        }
        try{
            con = DriverManager.getConnection
                    ("jdbc:mysql://localhost/film_datenbank","gast","gast");//****** durch pw ersetzen
            stmt=con.createStatement();
            rs=stmt.executeQuery
                    ("SELECT * FROM dvd_sammlung");
            while(rs.next()){
                System.out.println("nr: "+rs.getString(1));
                System.out.println("name: "+rs.getString(2));
                System.out.println("nummer: "+rs.getString(3));
                System.out.println("time (min.): "+rs.getString(4));
                System.out.println("*************************");// optisches trennen der datensätze
            }
            stmt.close();
            con.close();
        }
        catch(SQLException e){
            e.printStackTrace();
            return;
        }
    }
}
 

lam_tr

Top Contributor
Die System.out.println-Methode ist nicht für GUI gedacht. Funktioniert nur in der GUI --> Das weißt du sicherlich.
Bevor ich mit GUI angefangen habe, habe ich natürlich mit der Konsolenausgabe angefangen.

Java:
package datenbank;

import java.sql.*;

public class MeineErsteAbfrage {

    static Connection con = null;
    static Statement stmt = null;
    static ResultSet rs = null;

    public static void main(String args[]) throws InstantiationException, IllegalAccessException, SQLException {
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
        }
        catch (ClassNotFoundException e){
            e.printStackTrace();
            System.exit(1);
        }
        try{
            con = DriverManager.getConnection
                    ("jdbc:mysql://localhost/film_datenbank","gast","gast");//****** durch pw ersetzen
            stmt=con.createStatement();
            rs=stmt.executeQuery
                    ("SELECT * FROM dvd_sammlung");
            while(rs.next()){
                System.out.println("nr: "+rs.getString(1));
                System.out.println("name: "+rs.getString(2));
                System.out.println("nummer: "+rs.getString(3));
                System.out.println("time (min.): "+rs.getString(4));
                System.out.println("*************************");// optisches trennen der datensätze
            }
            stmt.close();
            con.close();
        }
        catch(SQLException e){
            e.printStackTrace();
            return;
        }
    }
}
Kommen da gescheite Werte beim ausführen raus?
 

NichtExpert

Bekanntes Mitglied
Funktioniert einwandfrei. es wird auch eine neue zeile erstellt, und auch in die SQL-Datenbank wird eine neue Zeile eingefügt. nur ich will das Ganze in einer GUI im JTable machen. Das ist das große Problem.
Musste auch nur eine Insert zeile hinzufügen
Java:
int add = stmt.executeUpdate("INSERT INTO dvd_sammlung VALUES ('3', 'Star Wars: Episode IV - Krieg der Sterne', '3', '125')");
            System.out.println(add);
 

mihe7

Top Contributor
Hier mal kurz was zusammengeschustert, nicht schön aber selten:
Java:
import javax.swing.table.AbstractTableModel;
import java.util.ArrayList;
import java.util.StringJoiner;
import java.util.List;
import java.util.stream.*;
import java.sql.*;

public class JdbcTableModel extends AbstractTableModel {
    private Connection conn;
    private String query;
    private List<Object[]> data;
    private List<String> columnNames;
    private String tableName;

    public JdbcTableModel(Connection conn, String query) {
        this.conn = conn;
        this.query = query;
        requery();
    }

    public final void requery() {
        data = new ArrayList<>();
        try(Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(query)) {
            queryColumns(rs);
            while (rs.next()) {
                int cols = getColumnCount();
                Object[] row = new Object[cols+1];
                for (int i = 0; i < cols; i++) {
                    row[i+1] = rs.getObject(i+1);
                }
                data.add(row);
            }
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }

    private void queryColumns(ResultSet rs) throws SQLException {
        columnNames = new ArrayList<>();
        ResultSetMetaData rsmd = rs.getMetaData();
        int cols = rsmd.getColumnCount();
        tableName = cols > 0 ? rsmd.getTableName(1) : null;
        for (int i = 0; i < cols; i++) {
            columnNames.add(rsmd.getColumnName(i+1));
        }
    }

    @Override
    public int getColumnCount() { return columnNames.size(); }
    @Override
    public String getColumnName(int ix) { return columnNames.get(ix); }
    @Override
    public int getRowCount() { return data.size(); }
    @Override
    public Object getValueAt(int row, int ix) { return data.get(row)[ix+1]; }
    @Override
    public boolean isCellEditable(int row, int col) { return col >= 0; }

    @Override
    public void setValueAt(Object value, int rowIx, int col) {
        Object[] row = data.get(rowIx);
        row[col+1] = value;
        if (row[0] == null) {
            row[0] = "UPDATE";
        }
        fireTableRowsUpdated(rowIx, rowIx);
    }

    public void insertRow() {
        int cols = getColumnCount();
        int rowIx = data.size();
        Object[] row = new Object[cols+1];
        row[0] = "NEW";
        data.add(row);
        fireTableRowsInserted(rowIx, rowIx);
    }
    public void save() throws SQLException {
        handleInserts();
        handleUpdates();
    }

    private void handleInserts() throws SQLException {
        List<Object[]> toInsert = data.stream()
            .filter(o -> o[0] != null && o[0].equals("NEW"))
            .collect(Collectors.toList());

        String cols = String.join(", ",
                columnNames.stream()
                .skip(1)
                .collect(Collectors.joining(",")),
                columnNames.get(0));

        StringJoiner j = new StringJoiner(",");
        for (String column : columnNames) { j.add("?"); }
        String insert = "INSERT INTO " + tableName + "(" + cols + ")" +
            "VALUES (" + j.toString() + ")";

        processUpdate(insert, toInsert);
    }

    private void processUpdate(String dml,
                               List<Object[]> rows) throws SQLException {
        if (rows.isEmpty()) { return; }

        try(PreparedStatement stmt = conn.prepareStatement(dml)) {
            for (Object[] row : rows) {
                int cols = getColumnCount();
                stmt.setObject(cols, row[1]);
                for (int i = 1; i < cols; i++) {
                    stmt.setObject(i, row[i+1]);
                }
            }
            stmt.executeUpdate();
        }
    }

    private void handleUpdates() throws SQLException {
        List<Object[]> toUpdate = data.stream()
            .filter(o -> o[0] != null && o[0].equals("UPDATE"))
            .collect(Collectors.toList());

        StringJoiner j = new StringJoiner(", ");
        String cols = columnNames.stream()
            .skip(1)
            .map(col -> col + "= ?")
            .collect(Collectors.joining(", "));

        String update = "UPDATE " + tableName + " SET " + cols +
            " WHERE " +  columnNames.get(0) + "= ?";

        processUpdate(update, toUpdate);

    }
}

Java:
import javax.swing.*;
import java.sql.*;

public class Test {


    public static void main(String[] args) throws Exception {
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "test", "test");
        JdbcTableModel model = new JdbcTableModel(conn, "SELECT id, Nachname, Vorname FROM adressen");
        JButton save = new JButton("Speichern");
        save.addActionListener(e -> {
            try { model.save(); } catch (SQLException ex) { ex.printStackTrace(); }
        });

        JButton refresh = new JButton("Refresh");
        refresh.addActionListener(e -> model.requery());

        JButton insert = new JButton("Neu");
        insert.addActionListener(e -> model.insertRow());

        JPanel panel = new JPanel();
        panel.add(save);
        panel.add(insert);
        panel.add(refresh);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(new JScrollPane(new JTable(model)));
        frame.add(panel, java.awt.BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }

}
 

NichtExpert

Bekanntes Mitglied
Hier mal kurz was zusammengeschustert, nicht schön aber selten:
Hallo, vielen Dank für das Beispiel.
Habe mal den Code bei mir eingesetzt und die Zugriffsdaten geändert.
Leider bekomme ich eine Fehlermeldung:

java.sql.SQLException: Parameter index out of range (6 > number of parameters, which is 0).

Deinen Code habe ich mir angeguckt, konnte kein Index "6 >" finden.

Meine sql-Datenbank hat aus testgründen nur 5 einträge (Zeilen). Daher dachte ich, Hey... es könnte daran liegen und habe mal ein paar zeilen hinzugefügt.
Folge --> Dasselbe. Parameter index out of range (6 > number of parameters, which is 0)

Daher müsste es irgendwo am Code liegen.

Kannst du mir da nochmal helfen bzw weiß irgendeiner etwas?
 

mihe7

Top Contributor
Das passt irgendwie nicht recht zusammen, daher ein paar Nachfragen:

1. Du hast den Code genommen und nur die Connection URL und den SELECT angepasst?
2. Du bekommst die Tabelle angezeigt?
3. Beim Klick auf Speichern bekommst Du die Exception?

Du kannst Dir in processUpdate einfach mal dml ausgeben lassen.
 

NichtExpert

Bekanntes Mitglied
Das passt irgendwie nicht recht zusammen, daher ein paar Nachfragen:

1. Du hast den Code genommen und nur die Connection URL und den SELECT angepasst?
2. Du bekommst die Tabelle angezeigt?
3. Beim Klick auf Speichern bekommst Du die Exception?
1. Ja Genau
2. Die tabelle wird angezeigt
3. Richtig. Wenn ich auf speichern drücke, wird sie ausgelöst
 

NichtExpert

Bekanntes Mitglied
Ok habe noch etwas herausgefunden, was ich persönlich sehr komisch finde:
Wenn ich das ganze mit der SQL-Tabelle 'personalie' mache, kommt es zum Fehler.
Wenn ich das ganze mit der SQL-Tabelle 'customer' mache, funktioniert es einwandfrei.
Die Beiden Tabellen befinden sich in derselben Datenbank

Grund dafür?
 

NichtExpert

Bekanntes Mitglied
bei einer 3 Tabelle in einer anderen Datenbank kommt folgende Fehlermeldung:
Java:
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(min.), nr.)VALUES (null,null,null,null)' at line 1
Habe versucht ihn richtig hinzubekommen aber ohne Erfolg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
M MySQL MySQLSyntaxError in Java, obwohl Abfrage in HeidiSQL korrekt Datenbankprogrammierung 2
M Access Abfrage mit Parameter & Access/Java liefern unterschiedliche Ergebnisse Datenbankprogrammierung 2
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
J SQL-Abfrage mit java Datenbankprogrammierung 2
T select Abfrage in Java Integer speichern ? Datenbankprogrammierung 2
D JAVA hängt nach SQL Abfrage Datenbankprogrammierung 7
S MySQL-Abfrage unter java funktioniert nicht! Datenbankprogrammierung 4
M Beispiel zur Abfrage einer lokalen PostgresDB in Java! Datenbankprogrammierung 4
A java & mysql abfrage mit variablen auswerten, wie? Datenbankprogrammierung 8
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
B CSV in Java einbinden und Rechnung Datenbankprogrammierung 7
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2
H Datenbank Export mit Java Datenbankprogrammierung 3
I MariaDB-Verbindung in JAVA Datenbankprogrammierung 11
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
W Daten in Java intern abfragen Datenbankprogrammierung 1
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
D Java Datenbanken Datenbankprogrammierung 1
Y H2 H2 foreign key in Spark Java ausgeben Datenbankprogrammierung 1
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
K Java Datenbank auslesen Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
B MySQL bplaced Datenbank mit Java ansprechen Datenbankprogrammierung 11
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
O PostgreSQL Java Row Index erhalten Datenbankprogrammierung 1
dzim Cassandra Cluster DB und der Java-Treiber Datenbankprogrammierung 1
H Entity in Java implementieren Datenbankprogrammierung 13
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
P Datanbank für Java-Programmierung Datenbankprogrammierung 10
F Java SQLite Error Datenbankprogrammierung 19
F SQL Datenbank an Java Code anbinden Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben