# Viele verschiedenen SQL Abfragen



## Kursverwaltung (2. Jul 2016)

Hallo Zusammen,
Ich arbeite mit einem Klassenkameraden an einem Notenverwaltungsprogramm. Wir sind auf einer Schule für Informationstechnik und lernen im zweiten Jahr Java. Wir arbeiten an ein Programm welches die Noten und Daten in einer Datenbank speichert. Wir bekommen es auch hin SQL Statements auszuführen. Jedoch müssen wir viele verschieden SQL Anweisungen ausführen und das ganze Programm soll Objektorientiert sein. Daher haben wir eine Klasse welche die Verbindung herstellt und darin sollen eigentlich nur zwei Methoden sein, eine in welcher man ein Statement als Parameter übergibt und eine Methode um Daten updaten zu können. Und in einer anderen Klasse werden dann die Statements übergeben.
Wir haben viel gelesen aber finden nicht den entscheidenden Punkt womit wir das Lösen können. Anbei unsere Klasse mit den diversen Versuchen(aktuellster ist am ende).
Wir sind für jeden Tipp dankbar! Danke für eure Mühen


```
package Datenerhaltungsschicht;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class VerbindungHerstellen {

    private static Connection con = null;
    private static String dbHost = "***.de";                     // Hostname
    private static String dbPort = "3306";                         // Port
    private static String dbName = "***";                          // Datenbankname
    private static String dbUser = "***";                             // Datenbankuser
    private static String dbPass = "***";                          // Datenbankpasswort

    public VerbindungHerstellen() {
        try {
            Class.forName("com.mysql.jdbc.Driver");             // Datenbanktreiber für JDBC
                                                                // Schnittstellen laden.

            // Verbindung zur JDBC-Datenbank herstellen.
            con = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName + "?" + "user="
                    + dbUser + "&" + "password=" + dbPass);
        } catch (ClassNotFoundException e) {
            System.out.println("Treiber nicht gefunden");
        } catch (SQLException e) {
            System.out.println("Verbindung nicht moglich");
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
        }
    }

    private static Connection getInstance() {
        if (con == null)
            new VerbindungHerstellen();
        return con;
    }

    private static void Close() {
        try {
            con.close();
        } catch (SQLException e) {
            System.out.println(e.toString());
        }

    }
  
    // Gebe Tabelle in die Konsole aus
    public static void Schuelerliste() {
        con = getInstance();

        if (con != null) {
            // Abfrage-Statement erzeugen.
            Statement query;
            try {
                query = con.createStatement();

                // Tabelle anzeigen
                String sql = "SELECT schueler_ID, vorname, nachname  FROM schueler";
                ResultSet result = query.executeQuery(sql);

                // Ergebnisstabelle durchforsten
                while (result.next()) {
                    while (result.next()) {

                        String schueler_ID = result.getString("schueler_ID");
                        String vorname = result.getString("vorname");
                        String nachname = result.getString("nachname");
                        // String email = result.getString("email");
                        String info = schueler_ID + vorname + nachname;

                        System.out.println(info);
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }

    public static void AutoGroese() {
        con = getInstance();

        if (con != null) {
            // Abfrage-Statement erzeugen.
            Statement query;
            try {
                query = con.createStatement();

                // Tabelle anzeigen
                String sql = "SELECT schueler_ID, vorname, nachname  FROM schueler";
                ResultSet result = query.executeQuery(sql);

                // Ergebnisstabelle durchforsten
                while (result.next()) {
                    while (result.next()) {
                        for (int i = 1; i <= result.getMetaData().getColumnCount(); i++) {
                            System.out.print(result.getMetaData().getColumnLabel(i) + " ");
                        }

                        for (int i = 1; i <= result.getMetaData().getColumnCount(); i++) {
                            System.out.print(result.getString(i) + " ");
                        }
                        System.out.println();
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void Einzeiler(String frage) {
        con = getInstance();

        if (con != null) {
            // Abfrage-Statement erzeugen.
            Statement query;
            try {
                query = con.createStatement();

                // Tabelle anzeigen
                String sql = frage;
                ResultSet result = query.executeQuery(sql);

                // Ergebnisstabelle durchforsten
                while (result.next()) {
                    while (result.next()) {

                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
        return;
    }

    public static void Befehl_ausgabe(String select, String from) {
        con = getInstance();
        if (con != null) {
            // Abfrage-Statement erzeugen.
             PreparedStatement anweisung;
            try {
                anweisung = con.prepareStatement("SELECT = ? FROM = ?");
                anweisung.setString(1, select);
                anweisung.setString(2, from);
                anweisung.executeUpdate();

            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
```


----------



## Viktim (5. Jul 2016)

Wenn es um die Methode Befehl_ausgabe() geht liegt eier Fehler darin, das ihr mit den Ergebnissen ja gar nichts macht 
Ihr ruft ein select in der Datenbank auf und macht dann nichts weiter Damit.
Richtig sähe es (wenn ich eure Absichten richtig verstehe ) so aus:

```
public static void Befehl_ausgabe(String select, String from) {
  con = getInstance();
  if (con != null) {
  // Abfrage-Statement erzeugen.
  Statement stmt = con.createStatement();
  ResultSet rs = stmt.executeQuery("select " + select + " from " + from);
  while (rs.next()) {
     //Ab hier müsst ihr halt gucken was ihr wollt... Ihr könnt euch auch überall einen String holen ;)
      long ersteSpalte = rs.getLong(1);
      int zweiteSpalte = rs.getInt(2);
      String dritteSpalte = rs.getString(3);
      System.out.println(ersteSpalte + " | " + zweiteSpalte + " | " + dritteSpalte);
  }
  rs.close();
  stmt.close();
   }
}
}
```

Und die Gleichheitszeichen müssen auf jedenfall raus 


Kursverwaltung hat gesagt.:


> anweisung = con.prepareStatement("SELECT = ? FROM = ?");


----------



## KaffeeFan (5. Jul 2016)

Ich würde das ganze mit JPA lösen, kannst dich ja mal schlaulesen.

Gruß
Luk


----------

