package javacodebook.jdbc.insert;

import java.sql.*;

public class InsertIntoDB {

    public static void main(String[] args) {
        try {
            Class.forName("org.postgresql.Driver");
            Connection con =
                DriverManager.getConnection(
                    "jdbc:postgresql:test",
                    "postgres",
                    "postgres");

            Statement statement = con.createStatement();

            // Datenbank erstmal sauber machen
            statement.executeUpdate(
                "DELETE FROM employees WHERE id in(12,13)");

            // Einen Datensatz per executeUpdate einfügen
            statement.executeUpdate(
                "INSERT INTO employees(id,firstname,lastname)"
                    + " VALUES (12,'Miriam','Bauman')");

            // Den Beispieldatensatz ausgeben
            ResultSet result =
                statement.executeQuery(
                    "SELECT * FROM employees WHERE id=12");
            while (result.next()) {
                System.out.println(
                    "Inserted "
                        + result.getString("firstname")
                        + " "
                        + result.getString("lastname"));
            }

            // Insert über eine veränderbares ResultSet
            // ...erstmal ein veränderbares ResultSet
            // beim JDBC-Treiber bestellen
            try {
                statement =
                    con.createStatement(
                        ResultSet.TYPE_SCROLL_INSENSITIVE,
                        ResultSet.CONCUR_UPDATABLE);
            } catch (Exception e) {
                System.out.println(
                    "The used JDBC driver does not support "
                        + "updatable ResultSets");
                System.exit(0);
            }

            // Dann (k)einen Datensatz von employees auswaehlen
            // Natürlich kann man das SELECT hier beliebig
            // formulieren, die Variante unten ist die sparsamste
            statement.executeQuery(
                "SELECT * FROM employees WHERE false");
            result.moveToInsertRow();
            result.updateString("firstname", "Hezekiel");
            result.updateString("lastname", "Walters");
            result.updateInt("id", 13);
            result.insertRow();

            result =
                statement.executeQuery(
                    "SELECT * FROM employees WHERE id=13");
            while (result.next()) {
                System.out.println(
                    "Inserted "
                        + result.getString("firstname")
                        + " "
                        + result.getString("lastname"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
