{"id":3798,"date":"2017-03-14T20:57:20","date_gmt":"2017-03-14T18:57:20","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3798"},"modified":"2017-03-14T20:57:20","modified_gmt":"2017-03-14T18:57:20","slug":"inselraus-jdbc-treibertypen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2017\/03\/inselraus-jdbc-treibertypen\/","title":{"rendered":"Inselraus: JDBC Treibertypen"},"content":{"rendered":"<p>Oracle definiert vier Treiberkategorien, die wir im Folgenden beschreiben. Sie unterscheiden sich im Wesentlichen darin, ob sie \u00fcber einen nativen Anteil verf\u00fcgen oder nicht.<\/p>\n<h4>Typ 1: JDBC-ODBC-Br\u00fccke (JDBC-ODBC Bridge driver)<\/h4>\n<p>ODBC (Open Database Connectivity Standard) ist ein Standard von Microsoft, der den Zugriff auf Datenbanken \u00fcber eine genormte Schnittstelle m\u00f6glich macht. ODBC ist insbesondere in der Windows-Welt weit verbreitet, und f\u00fcr jede ernst zu nehmende Datenbank gibt es einen Treiber.<\/p>\n<p>Da es am Anfang der JDBC-Entwicklung keine Treiber gab, haben sich JavaSoft und Intersolv (seit 2000 Merant) etwas ausgedacht: eine JDBC-ODBC-Br\u00fccke, die die Aufrufe von JDBC in ODBC-Aufrufe der Client-Seite umwandelt. Da die Performance oft nicht optimal und die Br\u00fccke nicht auf jeder Plattform verf\u00fcgbar ist, stellt diese JDBC-Anbindung h\u00e4ufig eine Notl\u00f6sung dar. Und weil ODBC eine systembezogene L\u00f6sung ist, hat der Typ-1-Treiber native Methoden, was die Portierung und seinen Einsatz \u2013 etwa \u00fcber das Netz \u2013 erschwert. Die JDBC-ODBC-Br\u00fccke implementiert seit Version 1.4 den JDBC\u00a02-Standard. In Java 8 wurde die Br\u00fccke entfernt, ist also kein Teil mehr vom JDK. Es gibt existierende L\u00f6sungen auf dem Markt, allerdings gibt es keine wirkliche Notwendigkeit mehr daf\u00fcr, da es f\u00fcr jede bedeutende Datenbank einen direkten JDBC-Treiber gibt.<\/p>\n<h4>Typ 2: Native plattformeigene JDBC-Treiber (Native-API Java driver)<\/h4>\n<p>Diese Treiber \u00fcbersetzen die JDBC-Aufrufe direkt in Aufrufe der Datenbank-API. Dazu enth\u00e4lt der Treiber Programmcode, der native Methoden aufruft.<\/p>\n<p>Treiber vom Typ 1 oder 2 sind nicht portabel auf jeder Plattform, da sie zum einen f\u00fcr die JDBC-ODBC-Br\u00fccke auf die Plattform-Bibliothek f\u00fcr ODBC zur\u00fcckgreifen m\u00fcssen und zum anderen auf plattformspezifische Zugriffsm\u00f6glichkeiten f\u00fcr die Datenbank angewiesen sind. Den Treiber auf einen anderen Computer zu \u00fcbertragen funktioniert in der Regel nicht, da sie eng mit der Datenbank verbunden sind. L\u00e4uft auf einem Server etwa eine alte dBASE-Datenbank und ein nativer Typ-2-Treiber greift direkt auf die lokale Datenbank zu, dann kann dieser JDBC-Treiber nicht einfach auf einen Tablet-PC mit ARM-Prozessor kopiert werden \u2013 zum einen w\u00fcrde er dort wegen der anderen Hardware-Architektur nicht laufen, und zum anderen w\u00fcrde der Treiber dann wohl kaum \u00fcber das Netzwerk auf die Datenbank zugreifen k\u00f6nnen.<\/p>\n<h4>Typ 3: Universeller JDBC-Treiber (Native-protocol all Java driver)<\/h4>\n<p>Der universelle JDBC-Treiber ist ein in Java programmierter Treiber, der beim Datenbankzugriff auf den Client geladen wird. Der Treiber kommuniziert mit der Datenbank nicht direkt, sondern \u00fcber eine Softwareschicht, die zwischen der Anwendung und der Datenbank sitzt: der Middleware. Damit erf\u00fcllen Typ-3-Treiber eine Vermittlerrolle, denn erst die Middleware leitet die Anweisungen an die Datenbank weiter. F\u00fcr Applets und Internetdienste hat ein Typ-3-Treiber den gro\u00dfen Vorteil, dass seine Klassendateien oft kleiner als Typ-4-Treiber sind, da ein komprimiertes Protokoll eingesetzt werden kann. \u00dcber das spezielle Protokoll zur Middleware ist auch eine Verschl\u00fcsselung der Verbindung m\u00f6glich. Kaum eine Datenbank unterst\u00fctzt verschl\u00fcsselte Datenbankverbindungen. Da zudem das Middleware-Protokoll unabh\u00e4ngig von der Datenbank ist, m\u00fcssen auf der Client-Seite f\u00fcr einen Datenbankzugriff auf mehrere Datenbanken auch nicht mehr alle Treiber installiert werden, sondern im g\u00fcnstigsten Fall nur noch ein Typ-3-Treiber von einem Anbieter. Die Ladezeiten sind damit deutlich geringer.<\/p>\n<h4>Typ 4: Direkte Netzwerktreiber (Net-protocol all Java driver)<\/h4>\n<p>Diese Treiber sind vollst\u00e4ndig in Java programmiert und kommunizieren direkt mit dem Datenbankserver. Sie sprechen mithilfe des datenbankspezifischen Protokolls direkt mit der Datenbank \u00fcber einen offenen IP-Port. Dies ist in einer Direktverbindung die performanteste L\u00f6sung. Sie ist jedoch nicht immer realisierbar, etwa bei Datenbanken wie MS Access, dBase oder Paradox, die kein Netzwerkprotokoll definieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oracle definiert vier Treiberkategorien, die wir im Folgenden beschreiben. Sie unterscheiden sich im Wesentlichen darin, ob sie \u00fcber einen nativen Anteil verf\u00fcgen oder nicht. Typ 1: JDBC-ODBC-Br\u00fccke (JDBC-ODBC Bridge driver) ODBC (Open Database Connectivity Standard) ist ein Standard von Microsoft, der den Zugriff auf Datenbanken \u00fcber eine genormte Schnittstelle m\u00f6glich macht. ODBC ist insbesondere in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1,11],"tags":[],"class_list":["post-3798","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3798"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3798\/revisions"}],"predecessor-version":[{"id":3799,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3798\/revisions\/3799"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}