JTextField Eingabe in DB speichern

Bitte aktiviere JavaScript!
Hallo
ich habe folgende DB, siehe Anhang.

Ich habe für die jeweiligen Spalten JTextField's in einem JFrame angelegt. Ich möchte nun alle Eingaben die ich in den Feldern tätige durch einen Speichern Button in meinee Datenbank schrieben. Wie formuliere ich die Insert Into Befehle korrekt ?
Scheitere hier dran :/


Java:
                    try
                    {
                         Class.forName("com.mysql.jdbc.Driver").newInstance();
                         String url="jdbc:mysql://"+hostname+":"+port+"/"+dbname;
                         conn=DriverManager.getConnection(url,user,pw);
                         
                         
                        stmt.executeUpdate("INSERT INTO Leistung VALUES('"+txtnDatumBeginn.getText()+"', '"+(new Date((new java.util.Date()).getTime()))+"')");
                        status.setText(txtnDatumBeginn.getText()+" INSERTET INTO DATABASE");
                    }
                    catch(Exception ex)
                    {
                        status.setText("FAILED");
                        ex.printStackTrace();
                    }
                    txtnDatumBeginn.setText("");
                
            
                
                
            }
        });
Gruß
 

Anhänge

A

Anzeige




Vielleicht hilft dir unser Kurs hier weiter —> (hier klicken)
So wie du es jetzt hast, solltest du es auf keinen Fall machen (Stichwort SQL-Injection)
Hier mal ein Insert Beispiel mit PreparedStatements. Diese "verhindern" SQL-Injection
 
Hab es jetzt mal angepasst, aber bis auf die Strings wird alles rot markiert
Java:
            preparedStatement.setDate(1, txtnDatumBeginn.getText());
            preparedStatement.setDate(2, txtnDatumBeginn.getText());
            preparedStatement.setInt(3, Mo.getText());
            preparedStatement.setInt(4, Di.getText());
            preparedStatement.setInt(5, Mi.getText());
            preparedStatement.setInt(6, Do.getText());
            preparedStatement.setInt(7, Fr.getText());
            preparedStatement.setInt(8, Sa.getText());
            preparedStatement.setInt(9, So.getText());
            preparedStatement.setInt(10, Ft.getText());
            preparedStatement.setString(11, txtnZug.getText());
            preparedStatement.setInt(12, txtnLinie.getText());
            preparedStatement.setDate(13, txtnAbfahrt.getText());
            preparedStatement.setDate(14, txtnAnkunft.getText());
            preparedStatement.setString(15, txtnStart.getText());
            preparedStatement.setString(16, txtnEnde.getText());
            preparedStatement.setString(17, txtnStations.getText());
Wie muss ich das umändern?
 
Habe umgewandelt, aber irgendwas hab ich falsch, bekomme folgende Fehlermeldung:


Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Time


Java:
    private static void insertRecordIntoTable() throws SQLException, ParseException {

        Connection dbConnection = null;
        PreparedStatement preparedStatement = null;

        String insertTableSQL = "INSERT INTO Leistung"
                + "(Datum, DatumEnde, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag, Feiertage, Zug, Linie, Abfahrt, Ankunft, Von, Nach, Stationen) VALUES"
                + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

        try {
            
            
            String text1 = Mo.getText();
            int mo = Integer.parseInt(text1);
            String text2 = Di.getText();
            int di = Integer.parseInt(text2);
            String text3 = Mi.getText();
            int mi = Integer.parseInt(text3);
            String text4 = Do.getText();
            int DO = Integer.parseInt(text4);
            String text5 = Fr.getText();
            int fr = Integer.parseInt(text5);
            String text6 = Sa.getText();
            int sa = Integer.parseInt(text6);
            String text7 = So.getText();
            int so = Integer.parseInt(text7);
            String text8 = Ft.getText();
            int ft = Integer.parseInt(text8);
            
            
            SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy");
            
            String startDate = txtnDatumBeginn.getText();
            String endDate = txtnDatumEnde.getText();
            
            
            java.util.Date date1 = sdf1.parse(startDate);
            java.sql.Date sqlStartDate = new java.sql.Date(date1.getTime());  
            
            java.util.Date date2 = sdf1.parse(endDate);
            java.sql.Date sqlEndDate = new java.sql.Date(date2.getTime());
            

            DateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
            Time time1 = (Time) dateFormat.parse(txtnAbfahrt.getText());
            Time time2 = (Time) dateFormat.parse(txtnAnkunft.getText());
            
            String text9 = txtnLinie.getText();
            int Linie = Integer.parseInt(text9);
            
            
            
            dbConnection = getDBConnection();
            preparedStatement = dbConnection.prepareStatement(insertTableSQL);

            preparedStatement.setDate(1, (java.sql.Date) sqlStartDate);
            preparedStatement.setDate(2, (java.sql.Date) sqlEndDate);
            preparedStatement.setInt(3, mo);
            preparedStatement.setInt(4, di);
            preparedStatement.setInt(5, mi);
            preparedStatement.setInt(6, DO);
            preparedStatement.setInt(7, fr);
            preparedStatement.setInt(8, sa);
            preparedStatement.setInt(9, so);
            preparedStatement.setInt(10, ft);
            preparedStatement.setString(11, txtnZug.getText());
            preparedStatement.setInt(12, Linie);
            preparedStatement.setTime(13, time1);
            preparedStatement.setTime(14, time2);
            preparedStatement.setString(15, txtnStart.getText());
            preparedStatement.setString(16, txtnEnde.getText());
            preparedStatement.setString(17, txtnStations.getText());

            // execute insert SQL stetement
            preparedStatement.executeUpdate();

            System.out.println("Record is inserted into DBUSER table!");

        } catch (SQLException e) {

            System.out.println(e.getMessage());

        } finally {

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

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

        }

    }
 
Die parse Methode wirft ein Date zurück. Du kannst ein Date nicht einfach zu einem Time Objekt casten. Mach lieber sowas Time time = new Time(date.getTime())
 
Sollte funktionieren.
Java:
DateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
Time time1 = new Time(dateFormat.parse(txtnAbfahrt.getText()).getTime());
 
Danke, glaub jetzt klappt es. Bekomme aber noch eine andere Fehlermeldung:

Parameter index out of range (16 > number of parameters, which is 15).

Das bedeutet?
 
Die Meldung ist jetzt weg aber jetzt sagt er mir dass die Tabelle nicht in der engine existiert?? :rolleyes:
Verbinde mit myphpadmin und die Tabelle ist vorhanden mit allen Spalten
 
Das bedeutet, dass du in deinem SQL Query ein "?" vergessen hast.
Code:
"INSERT INTO Leistung"
                + "(Datum, DatumEnde, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag, Feiertage, Zug, Linie, Abfahrt, Ankunft, Von, Nach, Stationen) VALUES"
                + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
 
Das bedeutet, dass du in deinem SQL Query ein "?" vergessen hast.
Code:
"INSERT INTO Leistung"
                + "(Datum, DatumEnde, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag, Feiertage, Zug, Linie, Abfahrt, Ankunft, Von, Nach, Stationen) VALUES"
                + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

Ja daran lag es ! Habe es umgeändert.
Aber jetzt halt die Meldung dass die Tabelle nicht existiert
Table '***** . ******' doesn't exist in engine
 
Hallo nochmal!
Ich habe noch ein String[] blabla, was ich in die DB schreiben will.

preparedStatement.set???(18, blabla);

Wie muss das set lauten bzw. wie muss ich hier umgehen?
Muss ich das String[] in String parsen?
Das String[] enthält mehrere Zeilen, wie kriege ich die in die DB geschrieben?
 
Was steht denn in dem String[] drin - also was für Daten. Eventuell würde sich hierfür eine neue Tabelle lohen.
Erzähl mal etwas darüber.
 
Die Daten werden über eine Klasse "Editor" in eine JTextArea eingegeben, per Zeilenumbruch gesplittet und in das String[] gespeichert. Es ist quasi eine Auflistung von Stationen.

Was für einen Typ müsste ich eigentlich Stationen in der der Datenbank geben?
 
Geht das nicht in einer? Weil muss die gesamte Tabelle später in Tabellenform aufrufen und es sollte alles drin sein
 
Es geht alles. Ist aber nicht Sinn und Zweck einer Datenbank.
Und mit der Darstellung hat das nichts zu tun
 
Okey, ich erstelle eine zweite Tabelle. Ich muss dann aber noch Leistung mit reinnehmen.

Wie schreibe ich ein Array dynamischer Größe in eine Datenbank?
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben