Java Datenbankverbindungsfähigkeit - JDBC

Hallo,

ich habe eine Frage zu JDBC. Im Anhang ist ein Bild, dass veranschaulichen soll, wie so eine JDBC genau funktioniert, aber ich versteh es nicht wirklich. Das einzige was ich weiß ist, dass JDBC Datenbankverbindungen aufbaut und dann mit SQL oder so verwalten kann.

Aber kann mir einer dieses Bild bitte erklären. Also wie funktioniert dieses JDBC? Für was ist applikation-server und db-server etc. da?

Danke im voraus!

mfg

JDBC ist eine abstrakte Schnittstelle, die es dir unabhängig vom verwendeten Datenbankprogramm erlaubt, auf diese zuzgreifen. Dazu gibt es verschiedene JDBC-Treiber, das Bild sagt eigentlich nichts anderes aus: Egal auf was für eine Datenbank du zugreifst, du brauchtst am Code nichts verändern, außer die Zeile, die den Treiber lädt. Das Bild veraunschaulicht die verschiedenen Möglichkeiten, wie auf eine Datenbank (Db-Server) zugegriffen werden kann: Direkt über TCP bzw. über einen dazwischen geschalteten Application-Server, der sich um Sicherheit/Managment der Datenbank kümmert, oder mithilfe Nativer Bibliotheken. Wie genau die Kommunikationsprotokolle zwischen Treiber und Datenbank dabei aussehen kann dir egal sein, weil JDBC das soweit abstrahiert, dass du nichts davon mitbekommst

um auf den wunsch einzugehen und das bild zu erklären

das bild ist erstmal in drei bereich aufgeteilt :

oben : deine app mit dem jdbc-driver
mitte : der eigentlich ablauf zur datenbank
unten : die datenbank selbst

wie schon zu erkennen bleiben der obere und der untere teil gleich, es ändert sich also nur die “verbindung” in der mitte

um diese von links nach rechts durchzugehen

odbc : odbc steht für “open database connectivity” und wurde von microsoft entwickelt (M$ und open ? ein widerspruch in sich) und bildet den urvater für jdbc : eine offene abstrakte api die es ermöglicht über eine standardisierte schnittstelle mit verschiedenen datenbanken zu kommunizieren, und sieht “intern” ungefähr genau so aus wie java JDBC (java database connectivity)
odbc wird meist in verbindung mit access- oder ms-sql-datenbanken genutzt da bei der installation dieser datenbanken entsprechende odbc-driver im system installiert werden auf die man dann über den odbc-driver von java zugreifen kann
benötigt in der regel etwas mehr aufwand da man erstmal in der odbc-konsole die entsprechende quelle bereitstellen muss
in deinem beispiel wurde das ganze dann mit einem weiteren native-driver gepaart, das bedeutet also das auch odbc selbst wieder nur auf einen bestimmten driver (in der regel eine windows-dll) zugreift und über diesen dann die kommunikation abbildet
so wie es gezeigt wird wäre es die typische art und weise um auf eine lokale access-datenbank zuzugreifen

native : native bedeutet in java immer das irgendwie irgendeine system-lib (windows : dll , unix : so) verwendet wird
nutzt man so eher für den lokalen zugriff da hier meist mit inter-prozess-pipes gearbeitet wird um sich einen netzwerk-socket zu sparen
hat also auch teilweise ein bisschen was mit sicherheit zu tun, denn dienste die auf ihren standard-ports laufen sind immer ein beliebtes ziel
für diese verbindung hätte ich jetzt spontan kein beispiel, aber ein mögliches szenario wäre z.b. das jemand seinen datenbank-code in eine native lib gesteckt hat und für diese dann über JNI/JNA eine java-schnittstelle bereitstellt auf die dann ein jdbc-driver aufsetzt
wirklich sinnvoll würde ich diese methode nicht erachten

application server : sehr weit verbreitet und auch hier immer wieder gerne genannt : zugriff auf eine externe datenbank über einen web-service / application server
bei diesem speziellen anwendungs-fall läuft die gesammte kommunikation über einen web-server (liegt in der regel auf dem selben system wie die datenbank)
sinn des app-servers ist es eine trennschicht zwischen deinem code und der datenbank zu bilden, das geht dann dabei los das du keine zugangsdaten mehr in deinen code packen musst und endet beim nutzen sicherer standards wie ssl
ein typisches szenraio hier wäre auf dem server ein kleines php-script was die daten die übermittelt werden auf gültigkeit prüfen (egal wie) und dann die verarbeitung mit der datenbank erledigt, ggf auch eine rückmeldung gibt
das ganze läuft dann entweder über normales http (tcp/80) oder https (tcp/443) zur sicherung der kommunikation
wichtig hier ist das man das php-script sehr gut gegen manipulationen absichern muss

direkte verbindung : hierbei stellt die java-klasse des jdbc-drivers direkt eine verbindung zur datenbank her, entweder, wie z.b. bei mysql, über eine socket verbindung, oder bei embedded wie H2 über einen File-zugriff
es ist die häufigste implementierung da datenbank-server in der regel übers netzwerk angesprochen werden (können)
also implementiert man in java mit standard-mitteln eine netzwerk-verbindung die sich um die verarbeitung der daten kümmert und nach außen hin jdbc-konform zur verfügung stellt

natürlich kann man noch viel mehr machen und alles mit ein ander kombinieren, z.b. einen odbc-driver der dann auf eine native-lib zugreift nur um über einen lokalen-proxy per vpn auf einen webservice zuzugreifen der selbst dann eine netzwerk-verbindung zur eigentlichen datenbank aufbaut

aber um es mal mit kevins worten zu fassen : das bild selbst sagt nichts aus oder gibt irgendwas über jdbc preis … sondern stellt lediglich 4 der möglichen verbindungen jdbc-driver <-> dbms dar …