JTextField Eingabe in DB speichern

Bitte aktiviere JavaScript!
Da gibt es natürlich viele Wege. Hier mal einer, der einfach ein ResultSet ausgibt:
Java:
import java.io.*;
import java.sql.*;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;

public class Test {

    public static void createPdf(String filename, ResultSet rs) {
        try {
            Document doc = new Document();
            PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(filename));
            doc.open();
            doc.add(newTable(rs));
            doc.close();
        } catch (IOException | DocumentException ex) {
            ex.printStackTrace();
        }
    }

    private static PdfPTable newTable(ResultSet rs) throws IOException {
        try {
            ResultSetMetaData md = rs.getMetaData();
            int cols = md.getColumnCount();
            PdfPTable table = new PdfPTable(cols);
            addTableHeader(table, md);
            addTableBody(table, md, rs);
            return table;
        } catch (SQLException ex) {
            throw new IOException(ex);
        }
    }

    private static void addTableHeader(PdfPTable table, ResultSetMetaData md) 
            throws SQLException {
        for (int i = 0, n = md.getColumnCount(); i < n; i++) {
            table.addCell(newHeaderCell(md.getColumnLabel(i+1)));
        }
    }

    private static void addTableBody(PdfPTable table, ResultSetMetaData md, ResultSet rs) 
            throws SQLException {
        while (rs.next()) {
            for (int i = 0, n = md.getColumnCount(); i < n; i++) {
                table.addCell(newCell(rs.getObject(i+1)));
            }
        }
    }

    private static PdfPCell newHeaderCell(String value) {
        return new PdfPCell(new Phrase(value));
    }

    private static PdfPCell newCell(Object value) {
        return new PdfPCell(new Phrase(value == null ? "" : value.toString()));
    }

    public static void main(String[] args) throws Exception {
        String sql = "SELECT Zug, Linie, Abfahrt, Ankunft, Von, Nach, Stationen FROM leistungen";
        // ggf. noch WHERE-Klausel mit Parametern
        // dann müssen diese unten gesetzt werden (aktuell auskommentiert)

        try(Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test", "mihe7", "test");
                PreparedStatement stmt = conn.prepareStatement(sql)) {
            // Parameter setzen:
            // stmt.setXXX(column, param);
            try (ResultSet rs = stmt.executeQuery()) {
                createPdf("test.pdf", rs);
            }
        }
    }
}
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Ähnlich, die Schleife setzt nur die Parameter des Prepared Statement, der Aufruf ist außerhalb der Schleife. Da ist dann doch klar, dass nur ein Wert geschrieben wird.

Ich würde in der Schleife des PreparedStatement aufbauen und ausführen. Evtl der Übersicht halber in einer eigenen Funktion. Dank Connection Pooling kann sogar das holen der Connection da mit drin sein.
 
Ähnlich, die Schleife setzt nur die Parameter des Prepared Statement, der Aufruf ist außerhalb der Schleife. Da ist dann doch klar, dass nur ein Wert geschrieben wird.

Ich würde in der Schleife des PreparedStatement aufbauen und ausführen. Evtl der Übersicht halber in einer eigenen Funktion. Dank Connection Pooling kann sogar das holen der Connection da mit drin sein.
Ach vergiss es, baust ja ein batch auf ... falsch geschaut.
 
Komplett EDIT:

Java:
        try {
           
            VON = von.getText();
            BIS = bis.getText();
           
            SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yyyy");
           
            java.util.Date date1 = sdf1.parse(VON);
            java.sql.Date sqlTag1 = new java.sql.Date(date1.getTime());
           
           
            java.util.Date date2 = sdf1.parse(VON);
            java.sql.Date sqlTag2 = new java.sql.Date(date2.getTime());
           
           
            String insertTableSQL = "UPDATE leistungen"
                    + " SET Baustelle = true,"
                    + " Grund = '" + individuell.getText()
                    + "', Beginnt = '" + (java.sql.Date)sqlTag1
                    + "', Endet = '" + (java.sql.Date)sqlTag2
                    + "', ZwischenA = '" + a.getText()
                    + "', BisB = '" + b.getText()
                    + "' WHERE Tage "
                    + " BETWEEN '" + (java.sql.Date)sqlTag1
                    + "' AND '" + (java.sql.Date)sqlTag2 + "'";
           

            dbConnection = getDBConnection();
            preparedStatement = dbConnection.prepareStatement(insertTableSQL);

            preparedStatement.executeUpdate();
schreibt nur in eine Zeile und nicht zwischen sqlTag1 und sqlTagl2. Was hab ich heir falsch?
 
Zuletzt bearbeitet:
Hab ich, geht nicht. Eclipse sagt ich hätte einen error in meiner SQL syntax. Verstehe aber nicht wo.

Java:
            String insertTableSQL = "UPDATE leistungen"
                    + "SET (Baustelle, Grund, Beginnt, Endet, ZwischenA, BisB) VALUES"
                    + "(?,?,?,?,?,?)"
                    + "WHERE Tage BETWEEN'" + (java.sql.Date)sqlTag1 + "' AND '" + (java.sql.Date)sqlTag2 + "'";
            
            LocalDate start = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            LocalDate end = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            
            for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) {
            

            dbConnection = getDBConnection();
            preparedStatement = dbConnection.prepareStatement(insertTableSQL);
            preparedStatement.setBoolean(1, true);
            preparedStatement.setString(2, individuell.getText());
            preparedStatement.setDate(3, (java.sql.Date)sqlTag1);
            preparedStatement.setDate(4, (java.sql.Date)sqlTag2);
            preparedStatement.setString(5, a.getText());
            preparedStatement.setString(6, b.getText());
            preparedStatement.addBatch();
        }
        preparedStatement.executeBatch();

       
          //  preparedStatement.executeUpdate();

            System.out.println("Record is inserted into DBUSER table!");
 
Nein, keine Schleife. Nur:

Java:
            String sql = "UPDATE leistungen"
                    + "SET Baustelle=?, Grund=?, Beginnt=?, Endet=?, ZwischenA=?, BisB=? "
                    + "WHERE Tage BETWEEN ? AND ?";
            dbConnection = getDBConnection();
            try(preparedStatement = dbConnection.prepareStatement(sql)) {
                preparedStatement.setBoolean(1, true);
                preparedStatement.setString(2, individuell.getText());
                preparedStatement.setString(2, individuell.getText());
                preparedStatement.setDate(3, (java.sql.Date)sqlTag1);
                preparedStatement.setDate(4, (java.sql.Date)sqlTag2);
                preparedStatement.setString(5, a.getText());
                preparedStatement.setString(6, b.getText());
                // es folgen die zwei BETWEEN-Parameter
                preparedStatement.setDate(7, (java.sql.Date)sqlTag1);
                preparedStatement.setDate(8, (java.sql.Date)sqlTag2);
                preparedStatement.executeUpdate();
            }
 
Java:
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 '=1, Grund='ljkö', Beginnt='2019-01-03', Endet='2019-01-06', ZwischenA='ghrtjukz' at line 1
 
Schreib mal statt String sql = "UPDATE leistungen" bitte String sql = "UPDATE leistungen " also mit Leerzeichen vor dem Anführungszeichen am Ende, das habe ich vergessen.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben