# SQL Schnittstellen



## maydonoz (25. Jun 2010)

Ich habe eine Frage bezüglich unterstehendes Programm 
Man benutzt hier die Schnittstellen ResultSet ,Statement  und Connection , sollten wir ihre methoden normalerweise nicht selber implementieren , und die Methodenrümpfe von dieser Schnittstellen sollten nicht leer sein ?  Wieso funktionieren diese Metheden , obwohl die nicht implementiert sind ?

Gib es auch andere Schnittstellen ? 




```
import java.sql.*;

public class Anmelden_a {

  public static void main (String args[]) {

    if (args.length == 3){
      try {
        Class.forName("com.mysql.jdbc.Driver");

        Connection c = DriverManager.getConnection(
         "jdbc:mysql://137.250.125.91:3306/theDatabase","user","password");

        Statement abfrage = c.createStatement();

        String befehl = 
        "INSERT INTO Student VALUES (
         args[0],     
        args[1],
         args[2]
        )";
        abfrage.executeUpdate(befehl);

        befehl = 
        	"SELECT * FROM Student"
        	+ " WHERE Matrikelnummer = 24248495";
        ResultSet ergebnis = abfrage.executeQuery(befehl);
        while (ergebnis.next()){
        	System.out.println("Name: "+ergebnis.getString(2));	
        	System.out.println("Vorname: "+ergebnis.getString(1));	
        	System.out.println("Matrikelnummer: "+ergebnis.getString(3));	
        }
        
        befehl = "UPDATE Student SET Vorname = markus WHERE Matrikelnummer = 24248495"; 
        abfrage.executeUpdate(befehl);
      } 
      catch(Exception e){
          System.out.println("Datenbankzugriffsfehler: "+ e.getMessage());
      }
    }
    else {
      System.out.println("benutzen Sie 3 Parameter!");
    }
  }
}
```


----------



## Eldorado (25. Jun 2010)

Du willst hier: 
	
	
	
	





```
String befehl = 
        "INSERT INTO Student VALUES (
         args[0],     
        args[1],
         args[2]
        )";
```
doch bestimmt nicht args[0] ... als Namen, sondern den Inhalt der Variablen in die Datenbank stecken, oder?


----------



## agentone (25. Jun 2010)

> und die Methodenrümpfe von dieser Schnittstellen sollten nicht leer sein ?


Methoden von Interfaces haben nicht mal Rümpfe.


> obwohl die nicht implementiert sind ?


Diese Interfaces werden implementiert, und zwar von den verschiedenen Datenbank-Treibern. Beispielsweise installierst du mit 
	
	
	
	





```
Class.forName("com.mysql.jdbc.Driver");
```
 den MySQL-Treiber. Ja, und was bringt das? Das hat den Vorteil, dass du jede Datenbank, die SQL-fähig ist, mit demselbem Java-Code ansprechen kannst. Du bist also nicht an die Datenbank (bzw. an das DBMS) gebunden.


----------



## maydonoz (25. Jun 2010)

> Methoden von Interfaces haben nicht mal Rümpfe.



Das stimmt , so habe ich auch eigentlich gemeint ...



> Diese Interfaces werden implementiert, und zwar von den verschiedenen Datenbank-Treibern.



Die Interfaces  werden automtisch von den Treibern implementiert , sodass wir man die nicht mehr implementieren muss ? Das meinst du oder ?


----------



## agentone (26. Jun 2010)

> Die Interfaces werden automtisch von den Treibern implementiert , sodass wir man die nicht mehr implementieren muss ?



Die Treiber implementieren diese Interfaces, um konform zu java.sql, und damit auch zu JDBC zu sein. Automatisch passiert da garnichts.


----------



## Eldorado (26. Jun 2010)

Aber in soweit automatisch, das du dich nicht darum kümmern musst


----------



## maydonoz (26. Jun 2010)

Ok , vielen dank


----------

