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 …