JAVA Derby INSERT probleme

mirisbowring

Bekanntes Mitglied
Hi, ich möchte von einer GUI, in der Der Name, Geburtsdatum und Geschlecht eingegeben wird, in meine Datenbank schreiben. allerdings bekomme ich immer
Code:
java.lang.NullPointerException
aber auch nur das, also keine weitere Erläuterung oder so dazu.

Java:
private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {                                                 //Hier wird der angeklickte Wert gespeichert, um ihn später einsetzen zu können. das println ist zum nachverfolgen, ob alles sauber läuft, wenn die Konsole läuft.
        Inputg = (String) jComboBox10.getSelectedItem(); //hierbei handelt es sich um die combobox mit dem geschlecht
        //System.out.println(Inputg);
        //Der String wird zu m bzw. w umgeändert, da die datenbank lediglich diese Buchstaben für das Geschlecht gespeichert hat.
        String weibl = "weiblich";
        String man = "männlich";
        if (Inputg.contains(weibl)) 
        {
            Inputg = "w";
            //System.out.println(Inputg);
        } 
        else if (Inputg.contains(man)) 
        {
            Inputg = "m";
            //System.out.println(Inputg);
        }
        //System.out.println(e.getStateChange() == 1 ? JComboBox.getSelectedItem() : "");
        //Zahlen aus dem Datumfeldern werden eingelesen
        jahr = Integer.parseInt(jTextField18.getText());
        //String monat = jTextField17.getText();
        monat = Integer.parseInt(jTextField17.getText());
        tag = Integer.parseInt(jTextField15.getText());
        //Namen werden ausgelesen
        vorname = jTextField14.getText();
        nachname = jTextField16.getText();
        String name = nachname + ", " + vorname;
        //System.out.println(name);
        //es wird eine Variable 'y' mit dem Wert 1 erstellt und vom Monat abgezogen, da der Gregorianische Kalender von 0-11 geht|nicht aber von 1-12: Und da der nutzer das nicht beachten soll, muss der Integer einfach mit 1 Subtrahiert werden.
        int y;
        int z;
        y = 1;
        z = monat - y;
        //GregorianCalender ermöglicht einen Datum Datentyp
        //GregorianCalendar geburtsdatum = new GregorianCalendar(jahr, z, tag);
        //Date udate = geburtsdatum.getTime();
        //standartmäßig verwendet der GregorianCalender alle Einheiten (also auch Zeit, etc.) aber wir brauchen nur das Datum, demnach geben wir ihm das Schema vor
        //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");       
        //String datum = sdf.format(udate);
        //SQL
        //PreparedStatement preparedStatement = null;        
        
        
        String SQLinsert = "INSERT INTO SCHUELER (NAME, GESCHLECHT, GEBURTSDATUM) VALUES (?, ?, ?)";
        
        try
        {            
            PreparedStatement preparedStatement = conn.prepareStatement(SQLinsert);
            preparedStatement.setString(1, name);
            preparedStatement.setString(2, Inputg);         
            //Datum wird in Datenbankformat gebracht
            java.util.Date dutil;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-yy");
            dutil = sdf.parse(jahr + "-" + z + "-" + tag);
            java.sql.Date dsql = new java.sql.Date(dutil.getTime());            
            //wird für die Konsole ausgegeben
            System.out.println(dutil);  
            System.out.println("dsql =" + dutil); 
            preparedStatement.setDate(3, dsql);
            //Update durchführen
            preparedStatement.executeUpdate();
            /*stmtdbbi = dbverbindung.createStatement();
            stmtdbbi.executeUpdate("INSERT INTO LOGIN.SCHUELER (name, geschlecht, geburtsdatum) " 
                    +"VALUES ('"+name+"', '"+Inputg+"', '"+datum+"')");
            String SQLcontrol = ("SELECT * FROM LOGIN.SCHUELER");
            System.out.println(SQLcontrol);*/
        } catch (Exception e) {
            System.out.println("dbbearbeitenpanel DB-Verbindungsfehler: " + e);
            System.exit(0);
        }
    
    }

hat jmd ne Idee, wie ich das beheben kann, denn das ist so ziemlich die letzte Schwierigkeit in meinem Projekt 🙂

MFG
mirisbowring
 
Kannst du den ganzen Stacktrace reinstellen ?

Code:
java.lang.NullPointerException
    at datenbankgui.dbbearbeitenPanel.jButton8ActionPerformed(dbbearbeitenPanel.java:2862)
    at datenbankgui.dbbearbeitenPanel.access$600(dbbearbeitenPanel.java:18)
    at datenbankgui.dbbearbeitenPanel$8.actionPerformed(dbbearbeitenPanel.java:691)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
 
Und jetzt verrate uns bitte noch, welche Zeile in deinem Codeausschnitt damit gemeint ist:
datenbankgui.dbbearbeitenPanel.jButton8ActionPerformed(dbbearbeitenPanel.java:2862)
 
Achso ja 🙂

Code:
PreparedStatement preparedStatement = conn.prepareStatement(SQLinsert);


Und hier wird die Connection erstellt (bevor jmd. fragt)

Java:
Connection conn;    
final String database = "SPORTDATABASE";
    public void start() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        System.out.println("Datenbanktreiber erfolgreich geladen...");
            if (new File(database).exists()) {
                    conn = DriverManager.getConnection("jdbc:derby:" + database);
                    System.out.println(database + " existiert und wurde erfolgreich verbunden");
            } 
            else 
            {
                    conn = DriverManager.getConnection("jdbc:derby:" + database + ";create=true");
                    System.out.println(database + " existiert nicht und wird erstellt");
                    System.out.println(database + " erfolgreich verbunden");
            }
    }
 
In den angegebenen Zeile kann nur "conn" die Ursache für die NullPointerException sein.

Hast du schon geprüft, dass start() auch wirklich aufgerufen wird und die Ausgaben auf der Konsole deinen Erwartungen entspricht ?

Sonst könnte eine zweite Variable, die ebenfalls conn heißt und in einer anderen Klasse definiert ist so ein Problem verursachen.

Da das Problem anscheinend nicht lokal im Umfeld der Zeile passiert, braucht man wahrscheinlich den gesammten Code.
 
Stimmt... der erkennt conn nicht genau...
(Ursprünglich hatte ich die Verbindung zur Datenbank in einer anderen Klasse, aber dann hatte ich Probleme damit, auf die Methode von dieser Klasse aus zuzugreifen, weshalb ich jetzt conn in dieser Klasse definiere...

der code ist sehr lang (vor allem auch wegen des GUI BUILDERS von netbeans, der alles ein wenig länger macht, als man müsste)

Conn wird gleich am Anfang definiert und der Button (wo die SQL Eingabe erfolgen soll) startet bei Zeile 85 im zweiten Post.


Java:
package datenbankgui;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.StringTokenizer;
import javax.swing.*;
import datenbankgui.DB;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;


public class dbbearbeitenPanel extends javax.swing.JPanel{


    Connection conn;
    final String database = "SPORTDATABASE";
    public void start() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        System.out.println("Datenbanktreiber erfolgreich geladen...");
            if (new File(database).exists()) {
                    conn = DriverManager.getConnection("jdbc:derby:" + database);
                    System.out.println(database + " existiert und wurde erfolgreich verbunden");
            } 
            else 
            {
                    conn = DriverManager.getConnection("jdbc:derby:" + database + ";create=true");
                    System.out.println(database + " existiert nicht und wird erstellt");
                    System.out.println(database + " erfolgreich verbunden");
            }
    }
    
    //DB klassedb = new DB();
    //DB conn;
    //DB database;
    
    //in diesen String[s] wird die eingabe des Textfeldes gespeichert


    String vorname = null;
    String nachname = null;
    //Das Datum
    int tag;
    int monat;
    int jahr;
    //combobox klasse Auswahlstring
    String Inputk = null;
    //combobox name Auswahlstring
    String Inputn = null;
    //combobox geschlecht Auswahlstring
    String Inputg = null;
    //combobox SchulForm
    String Inputsf = null;
    //combobox klassenstufe
    String Inputks = null;
    //combobox klassenstufeanhang
    String Inputksa = null;
    //Klassenstufe im Datenbank design (z.B. 78 oder 910)
    String Inputksd = null;
    //Connection dbverbindung;
    Statement stmtdbb;
    Statement stmtdbbi;
    //hier werden die Schüler gespeichert
    ResultSet rss;
    //hier werden die Klassen gespeichert
    ResultSet rsk;
    //eingabe
    ResultSet ri;
    //Inhalt für combobox geschlecht wird erstellt (ein Array)
    String jComboBox10Liste[]
            = {
                "männlich",
                "weiblich"
            };


    //Objekt wird erzeugt, auf dem die Systemzeit/datum ausgegeben werden.
    JLabel Systemzeit;
    JLabel Systemdatum;
    //Systemdatum wird ermittelt
    SimpleDateFormat Date = new SimpleDateFormat("dd.MM.yyyy");
    //Systemzeit wird ermittelt (HH:mm:ss|ich nehme nur HH:mm)
    SimpleDateFormat Time = new SimpleDateFormat("HH:mm");
    //Hintergrundbild wir eingefügt
    Image bg = new ImageIcon("src\\ressources\\background1920x1080.png").getImage();


    @Override
    public void paintComponent(Graphics g) {
        g.drawImage(bg, 0, 0, getWidth(), getHeight(), this);
    }


    public dbbearbeitenPanel() {
        Systemdatum = new JLabel(Date.format(new Date()));
        Systemzeit = new JLabel(Time.format(new Date()));


        //Position des Labels wird bestimmt
        Systemdatum.setBounds(1103, 35, 70, 30);
        Systemzeit.setBounds(1134, 50, 40, 30);
        //laufende Uhr erstellen (1000 steht für die ms)
        Timer timer = new Timer(1000, new ActionListener() {


            @Override
            public void actionPerformed(ActionEvent e) {
                String aktuelleZeit = Time.format(new Date());
                Systemzeit.setText(aktuelleZeit);
            }
        });
        timer.start();


        add(Systemzeit);
        add(Systemdatum);
        setVisible(true);
        initComponents();
        scannerArray = new ArrayList(); // haelt die Daten
        jButtonImportDaten.setEnabled(false);  // Import-Button disable
        model1 = new DefaultListModel(); // Model für Listbox
        //DB();
    }
    /*public void DB() {
        try {
            //Datenbanktreiber wird geladen
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            System.out.println("eingabepanel Treiber erfolgreich geladen...");
        } catch (ClassNotFoundException e) {
            System.out.println("eingabepanel Fehler beim Laden des Treibers" + e);
            System.exit(0);
        }
        try {
            //User und Passwort werden gesetz und Pfad zur Datenbank
            String host = "jdbc:derby://localhost:1527/Datenbank";
            String username = "login";
            String userpw = "login";
            //Verbindung mit der Datenbank wird aufgebaut
            dbverbindung = DriverManager.getConnection(host, username, userpw);
            System.out.println("eingabepanel Verbindung erfolgreich...");


            //Daten werden in das ResultSet geladen
            stmtdbb = dbverbindung.createStatement();
            String SQLk = "SELECT * FROM klasse";
            //im ResultSet Object werden alle Ergebnisse aus der Datenbank gespeichert            
            ResultSet rsk = stmtdbb.executeQuery(SQLk);
                while (rsk.next()) {
                    jComboBox1.addItem(rsk.getString(2));
                    jComboBox9.addItem(rsk.getString(2));
                    jComboBox13.addItem(rsk.getString(2));
                    jComboBox17.addItem(rsk.getString(2));
                }
            //SQLs steht für SQL(Befehl)und s(schueler) ||| 2 ist die 2. Spalte, in der die Namen stehen. (mit name kann man das anscheinend nicht abfragen) --> die Zahlen stehen also für die jeweilige Spalte in der Tabelle
            /*String SQLs = "SELECT 2 "                                     //SELECT name                                                   --> VARCHAR
             + "FROM SCHUELER "                                  //FROM schueler
             + "WHERE 5 = (SELECT 1 "                            //WHERE klassen_ID = (SELECT klassen_ID                         --> INTEGER
             + "FROM KLASSE "                //                    FROM klasse
             + "WHERE 2 = '"+Inputk+"')";    //                    WHERE klassenbezeichnung = 'Input');      --> VARCHAR
             //rss = ResultSetSchueler
             ResultSet rss = stmt.executeQuery(SQLs);
             while (rss.next())
             {
             jComboBox2.addItem(rss.getString(1));
             }*/
        /*} catch (SQLException e) {
            System.out.println("eingabepanel DB-Verbindungsfehler: " + e);
            System.exit(0);
        }
    }*/
    public void verarbeiteCsvDatei(String fileName, ArrayList scannerList) { 
        try {
            final BufferedReader reader = new BufferedReader(new FileReader(fileName)); 
            String zeile = reader.readLine(); 
                while (zeile != null) 
                { 
                    verarbeiteCsvZeile(zeile, scannerList); 
                    zeile = reader.readLine(); 
                } 
                reader.close(); 
        } 
        catch (FileNotFoundException e) 
        {
                    e.printStackTrace();
        } 
        catch (IOException e) 
        {
                    e.printStackTrace();
        }
    } 
     /** 
     * Verarbeite eine einzelne CSV Zeile. 
     */ 
    public void verarbeiteCsvZeile(String data, ArrayList arrayList) { 
        //System.out.println("-------------------------- Neue Zeile:"); 
        StringTokenizer st = new StringTokenizer(data, ";"); 
        ScannerElement se = new ScannerElement(); //neues Scannerelement erstellen
        if (st.hasMoreTokens())
        {
            se.nachName = st.nextToken();
        }
        else
        {
            se.nachName = "???";
        }
            
        if (st.hasMoreTokens()){
            se.vorName = st.nextToken();
        }
        else
        {
            se.vorName = "???";
        }
        if (st.hasMoreTokens()){
            se.geschlecht = st.nextToken();
        }
        else
        {
            se.geschlecht = "???";
        }
        if (st.hasMoreTokens())
        {
            se.klasse = st.nextToken();
        }
        else
        {
            se.klasse = "???";
        }
        
        if (st.hasMoreTokens())
        {
            se.geburtsDatum = st.nextToken();
        }
        else
        {
            se.geburtsDatum = "???";
        }
            
        // Kontrollausgabe
        System.out.printf("in CVS gelesen: %-25s %-25s %-25s %-25s  %-25s \n",
            se.nachName,
            se.vorName,
            se.geschlecht,
            se.klasse,
            se.geburtsDatum);


        scannerArray.add(se);
    }

ps: ich muss das ganze in mehrere Beiträge machen, da der sonst zu lang ist (wird mir angezeigt)
 
Zuletzt bearbeitet:
Java:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        mainmenupanel mp = new mainmenupanel();
        BorderLayout borderLay = new BorderLayout();
        setLayout(borderLay);
        removeAll();
        add(mp);
        mp.setVisible(true);
        validate();
    }                                        


    private void jTextField17ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            


    private void jTextField16ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        //Nachname
    }                                            


    private void jTextField15ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            


    private void jTextField14ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        //Vorname       
    }                                            


    private void jTextField20ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            


    private void jTextField22ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            


    private void jTextField23ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            


    private void jTextField32ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
    }                                            


    private void jComboBox9ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        //Hier wird der angeklickte Wert gespeichert, um ihn später einsetzen zu können. das println ist zum nachverfolgen, ob alles sauber läuft, wenn die Konsole läuft.
        Inputk = (String) jComboBox9.getSelectedItem();
        System.out.println(Inputk);
        //System.out.println(e.getStateChange() == 1 ? JComboBox.getSelectedItem() : "");
    }                                          


    private void jComboBox17ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        //Hier wird der angeklickte Wert gespeichert, um ihn später einsetzen zu können. das println ist zum nachverfolgen, ob alles sauber läuft, wenn die Konsole läuft.
        Inputk = (String) jComboBox17.getSelectedItem();
        System.out.println(Inputk);
        //System.out.println(e.getStateChange() == 1 ? JComboBox.getSelectedItem() : "");
    }                                           


    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        //Hier wird der angeklickte Wert gespeichert, um ihn später einsetzen zu können. das println ist zum nachverfolgen, ob alles sauber läuft, wenn die Konsole läuft.
        Inputk = (String) jComboBox1.getSelectedItem();
        System.out.println(Inputk);
        //System.out.println(e.getStateChange() == 1 ? JComboBox.getSelectedItem() : "");
    }                                          


    private void jComboBox13ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        //Hier wird der angeklickte Wert gespeichert, um ihn später einsetzen zu können. das println ist zum nachverfolgen, ob alles sauber läuft, wenn die Konsole läuft.
        Inputk = (String) jComboBox13.getSelectedItem();
        System.out.println(Inputk);
        //System.out.println(e.getStateChange() == 1 ? JComboBox.getSelectedItem() : "");
    }                                           


    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        //Hier wird der angeklickte Wert gespeichert, um ihn später einsetzen zu können. das println ist zum nachverfolgen, ob alles sauber läuft, wenn die Konsole läuft.
        Inputg = (String) jComboBox10.getSelectedItem(); //hierbei handelt es sich um die combobox mit dem geschlecht
        //System.out.println(Inputg);
        //Der String wird zu m bzw. w umgeändert, da die datenbank lediglich diese Buchstaben für das Geschlecht gespeichert hat.
        String weibl = "weiblich";
        String man = "männlich";
        if (Inputg.contains(weibl)) 
        {
            Inputg = "w";
            //System.out.println(Inputg);
        } 
        else if (Inputg.contains(man)) 
        {
            Inputg = "m";
            //System.out.println(Inputg);
        }
        //System.out.println(e.getStateChange() == 1 ? JComboBox.getSelectedItem() : "");
        //Zahlen aus dem Datumfeldern werden eingelesen
        jahr = Integer.parseInt(jTextField18.getText());
        //String monat = jTextField17.getText();
        monat = Integer.parseInt(jTextField17.getText());
        tag = Integer.parseInt(jTextField15.getText());
        //Namen werden ausgelesen
        vorname = jTextField14.getText();
        nachname = jTextField16.getText();
        String name = nachname + ", " + vorname;
        //System.out.println(name);
        //es wird eine Variable 'y' mit dem Wert 1 erstellt und vom Monat abgezogen, da der Gregorianische Kalender von 0-11 geht|nicht aber von 1-12: Und da der nutzer das nicht beachten soll, muss der Integer einfach mit 1 Subtrahiert werden.
        int y;
        int z;
        y = 1;
        z = monat - y;
        //GregorianCalender ermöglicht einen Datum Datentyp
        //GregorianCalendar geburtsdatum = new GregorianCalendar(jahr, z, tag);
        //Date udate = geburtsdatum.getTime();
        //standartmäßig verwendet der GregorianCalender alle Einheiten (also auch Zeit, etc.) aber wir brauchen nur das Datum, demnach geben wir ihm das Schema vor
        //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");       
        //String datum = sdf.format(udate);
        //SQL
        //PreparedStatement preparedStatement = null;        
        
        
        String SQLinsert = "INSERT INTO SCHUELER (NAME, GESCHLECHT, GEBURTSDATUM) VALUES (?, ?, ?)";
        
        try
        {            
            PreparedStatement preparedStatement = conn.prepareStatement(SQLinsert);
            preparedStatement.setString(1, name);
            preparedStatement.setString(2, Inputg);         
            //Datum wird in Datenbankformat gebracht
            java.util.Date dutil;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-yy");
            dutil = sdf.parse(jahr + "-" + z + "-" + tag);
            java.sql.Date dsql = new java.sql.Date(dutil.getTime());            
            //wird für die Konsole ausgegeben
            System.out.println(dutil);  
            System.out.println("dsql =" + dutil); 
            preparedStatement.setDate(3, dsql);
            //Update durchführen
            preparedStatement.executeUpdate();
            /*stmtdbbi = dbverbindung.createStatement();
            stmtdbbi.executeUpdate("INSERT INTO LOGIN.SCHUELER (name, geschlecht, geburtsdatum) " 
                    +"VALUES ('"+name+"', '"+Inputg+"', '"+datum+"')");
            String SQLcontrol = ("SELECT * FROM LOGIN.SCHUELER");
            System.out.println(SQLcontrol);*/
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("dbbearbeitenpanel DB-Verbindungsfehler: " + e);
            System.exit(0);
        }
    
    }                                        
    private void jTextField18ActionPerformed(java.awt.event.ActionEvent evt) {                                             
    }                                            
    private void jComboBox10ActionPerformed(java.awt.event.ActionEvent evt) {                                            
    }                                           
    private void jComboBox4ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    }                                          
    private void jComboBox3ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    }                                          
    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Inputks = (String) jComboBox3.getSelectedItem();
        Inputsf = (String) jComboBox4.getSelectedItem();
        Inputksa = (String) jComboBox5.getSelectedItem();
        //Die Klassen heißen z.B. G7a und nicht Gymnasium7a, weshalb hier die abkürzung gemacht wird
        String gym = "Gymnasium";
        String sek = "Sekundarschule";
        if(Inputsf.contains(gym))
        {
           Inputsf = "G";
           //System.out.println(k1);
        }
        else if(Inputsf.contains(sek))
        {
           Inputsf = "S";
           //System.out.println(k1);
        }
        //folgendes ist keine Klassenbezeichnung sondern lediglich ein Platzhalter, falls die Klasse keinen Anhang hat: G7
        String nothing = "-------------";
        if(Inputksa.contains(nothing))
        {
            Inputksa = "";
        }
        String addklass = Inputsf + Inputks + Inputksa;
        System.out.println(addklass);
        //Klassenstufe wird auf Datenbankdesign gebracht, da es für die Bestenliste wichtig ist, dass 7./8. und 9./10. zusammen sind
        String sieben = "7";
        String acht = "8";
        String neun = "9";
        String zehn = "10";
        if(Inputks.contains(sieben))
        {
            Inputksd = "78";
        }
        else if(Inputks.contains(acht))
        {
            Inputksd = "78";
        }
        else if(Inputksd.contains(neun))
        {
            Inputksd = "910";
        }
        else if(Inputksd.contains(zehn))
        {
            Inputksd = "910";
        }
        //SQL
        try
        {
            stmtdbbi = conn.createStatement();
            stmtdbbi.executeUpdate("INSERT INTO klasse ( 2, 3) " 
                    +"VALUES ("+addklass+", "+Inputksd+")");
            System.out.println(addklass + Inputksd);
            String SQLcontrol = ("SELECT * FROM klasse");
            System.out.println(SQLcontrol);
        } catch (Exception e) {
            System.out.println("dbbearbeitenpanel DB-Verbindungsfehler: " + e);
            System.exit(0);
        }
    }                                        
    private void jComboBox5ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    }                                          


    private void jButtonLeseDatenActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        JFileChooser fileChooser = new JFileChooser(); // Dateiauswahldialog
        // das aktelle Verzeichnis für den Dateiauswahldialog setzen
        String lastDir = System.getProperty("Scanner.lastDir");
        if (lastDir == null){
            lastDir = System.getProperty("user.home");
        }
        fileChooser.setCurrentDirectory(new File(lastDir));
        //fileChooser.setCurrentDirectory(new File("c:\\temp\\scanner"));


        // start Dateiauswahldialog
        int result = fileChooser.showOpenDialog(this);


        if (result == JFileChooser.APPROVE_OPTION) {
            // Dateiauswahl war erfolgreich
            File selectedFile = fileChooser.getSelectedFile();
            System.setProperty("Scanner.lastDir", selectedFile.getAbsolutePath());


            //System.out.println("Selected file: " + selectedFile.getAbsolutePath());
            scannerArray.clear(); // arraylist leeren


            // CSV Datei lesen und arraylist füllen
            verarbeiteCsvDatei(selectedFile.getAbsolutePath(), scannerArray);


            // Loeschen der Elemente in der Listbox
            model1.removeAllElements();


            for (int i = 0; i < scannerArray.size(); i++) {


                ScannerElement se = (ScannerElement)scannerArray.get(i);


                System.out.printf("Kontrollausgabe fuer index %d: %-25s %-25s %-25s %-25s  %-25s \n",
                    i,
                    se.nachName,
                    se.vorName,
                    se.geschlecht,
                    se.klasse,
                    se.geburtsDatum);


                // Listbox fuellen
                model1.addElement(se.nachName+", "+se.vorName);
            }


            jListGeleseneDaten.setModel(model1); // Model an die Listbox übergeben
            jButtonImportDaten.setEnabled(true); // Importbutton enable
            Erfolgreichlesen ef = new Erfolgreichlesen();
            ef.setVisible(true);
            
        }
    }                                                


    private void jButtonImportDatenActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        for (int i = 0; i < scannerArray.size(); i++) {


            ScannerElement se = (ScannerElement)scannerArray.get(i);


            System.out.printf("impotiere fuer index %d: %-25s %-25s %-25s %-25s  %-25s \n",
                i,
                se.nachName,
                se.vorName,
                se.geschlecht,
                se.klasse,
                se.geburtsDatum);


            /*
            *       Hier die Daten in die Dateibank über SQL schreiben
            *       dabei ist die erste Zeile die Ueberschrift
            */
        }
        // Listbox leeren
        model1.removeAllElements(); 
        jListGeleseneDaten.setModel(model1);
        jButtonImportDaten.setEnabled(false); // Importbutton disable
        Erfolgreichimport ei = new Erfolgreichimport();
        ei.setVisible(true);
    }

Der Rest sollte eher uninteressant sein, da ich mit dem nicht arbeite...
 
Zuletzt bearbeitet:
Ich finde nirgends den Aufruf der "start"-Methode.

Daher noch einmal die Frage: Hast du schon geprüft, dass start() auch wirklich aufgerufen wird und die Ausgaben auf der Konsole deinen Erwartungen entspricht ?
 
stimmt, ich habe ganz vergessen, die Methode auch aufzurufen...

danke 🙂

allerdings stellt sich mir jetzt ein problem, mit dem ich überhaupt nichts anfangen kann, denn

wenn ich jetzt etwas aus der Datenbank lesen (SELECT) will, gibt er mir nicht das aus, was ich haben will:
Code:
org.apache.derby.impl.jdbc.EmbedResultSet42@1d95a69a

Java:
String SQLcontrol = "SELECT NAME FROM SCHUELER";

test = conn.createStatement();            ResultSet rscontrol = test.executeQuery(SQLcontrol);
            while(rscontrol.next())
            {
                System.out.println(rscontrol);
            }
            rscontrol.close();

der Fehler muss ja hier liegen, aber ich weiß nicht genau, was daran jetzt falsch sein soll. (die menge der Zeilen, die er ausgibt ist schon richtig (also diese art Fehlermeldung wiederholt er, wie die Anzahl der Zeilen in der DB)
 
Die toString Methode ist bei deinem ResultSet nicht überschrieben. Daher zieht die Implementierung von Object. Also wird der Klassenname + @ + der Hashwert des Objekts ausgegeben.

Wenn du "rscontrol" in Zeile 7 durch "rscontrol.getString(1)" ersetzt, dann wird für jeden Satz das erste Feld ausgegeben.
 
Stimmt 🙂

vergessen 😳

wie schaffe ich es, alle spalten anzuzeigen? (das mit dem * ist mir klar... ich meine halt das mit dem getString())
mit Kommata abtrennen geht leider nicht so weit ich weiß
 
Zuletzt bearbeitet:

Zurück
Oben