{"id":2308,"date":"2013-09-11T19:07:27","date_gmt":"2013-09-11T17:07:27","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2308"},"modified":"2013-09-11T19:07:27","modified_gmt":"2013-09-11T17:07:27","slug":"jdbc-lobs-large-objects","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/09\/jdbc-lobs-large-objects\/","title":{"rendered":"JDBC LOBs (Large Objects)"},"content":{"rendered":"<p>Auf der Datenbankseite gibt es zwei Typen f\u00fcr besonders gro\u00dfe Daten: BLOB und CLOB. \u00bbB\u00ab steht f\u00fcr Binary und \u00bbC\u00ab f\u00fcr Character, also steht ein SQL BLOB f\u00fcr beliebig gro\u00dfe Bin\u00e4rdaten und ein CLOB f\u00fcr beliebig gro\u00dfe Textdaten.<\/p>\n<p>Die LOBs unterscheiden sich von den anderen Datentypen dadurch, dass der Treiber erst dann die Daten \u00fcbertr\u00e4gt, wenn sie auch angesprochen werden: Wird eine Zeile mit einer Zahl \u00fcbertragen, so wird der Treiber auch diese Zahl immer mitschicken. Bei den LOBs sieht das anders aus: Intern steckt dort eine Art Verweis (LOCATION), die mitgeschickt wird, aber nicht die Daten selbst. Durch die Kapselung im Treiber f\u00e4llt das allerdings nicht auf.<\/p>\n<p>F\u00fcr den BLOB gibt es in JDBC die Schnittstelle Blob und f\u00fcr CLOB Clob. In beiden F\u00e4llen k\u00f6nnen die gro\u00dfen Daten erfragt, aktualisiert und angelegt werden. Au\u00dferdem l\u00e4sst sich die L\u00e4nge erfragen und lassen sich ab einer bestimmten Position Daten auslesen.<\/p>\n<h4>Einen BLOB besorgen<\/h4>\n<p>Einem BLOB\/CLOB steht genau, wie es f\u00fcr andere Datentypen entsprechende getXXX()-Funktionen gibt, eine getBlob()\/getClob()-Funktion zur Verf\u00fcgung. Der Unterschied besteht nur darin, dass getInt() direkt ein int zur\u00fcckgibt, w\u00e4hrend getBlob() nur eine Referenz auf ein Blob-Objekt liefert, \u00fcber die im zweiten Schritt die Daten zu beziehen sind.<\/p>\n<p><b>Beispiel:<\/b> Eine Tabelle Persons weist eine Spalte Image auf, die eine Grafik einer Person speichert. Die Grafik ist in einer Spalte vom Typ BLOB.<\/p>\n<pre lang=\"java\">ResultSet rs = stmt.executeQuery( &quot;SELECT * FROM Persons&quot; );\nrs.first();\nBlob data = rs.getBlob( &quot;Image&quot; );<\/pre>\n<p>data bezieht sich jetzt auf das Blob-Objekt. Es enth\u00e4lt noch nicht die Daten. Sie lassen sich zum Beispiel \u00fcber die Methode data.getBinaryStream() beziehen. Damit l\u00e4sst sich dieser InputStream toll im Konstruktor von ImageIcon() einsetzen, der aus den Daten dann gleich eine Swing-taugliche Grafik konstruiert. Teile des Datenfeldes werden mit byte[] getBytes(start, ende) angefordert. data.length() liefert die Anzahl der Elemente des LOBs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auf der Datenbankseite gibt es zwei Typen f\u00fcr besonders gro\u00dfe Daten: BLOB und CLOB. \u00bbB\u00ab steht f\u00fcr Binary und \u00bbC\u00ab f\u00fcr Character, also steht ein SQL BLOB f\u00fcr beliebig gro\u00dfe Bin\u00e4rdaten und ein CLOB f\u00fcr beliebig gro\u00dfe Textdaten. Die LOBs unterscheiden sich von den anderen Datentypen dadurch, dass der Treiber erst dann die Daten \u00fcbertr\u00e4gt, [&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],"tags":[],"class_list":["post-2308","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2308","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=2308"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2308\/revisions"}],"predecessor-version":[{"id":2309,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2308\/revisions\/2309"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}