---
title: 'JDBC LOBs (Large Objects)'
url: 'https://www.tutego.de/blog/javainsel/2013/09/jdbc-lobs-large-objects'
markdown: 'https://www.tutego.de/blog/javainsel/2013/09/jdbc-lobs-large-objects.md'
date: '2013-09-11'
description: 'Auf der Datenbankseite gibt es zwei Typen für besonders große Daten: BLOB und CLOB. »B« steht für Binary und »C« für Character, also steht ein SQL BLOB für beliebig große Binärdaten und ein CLOB für beliebig große Textdaten. Die LOBs unterscheiden sich von den anderen Datentypen dadurch, dass der T…'
taxonomy:
  category:
    - Allgemein
---

# JDBC LOBs (Large Objects)

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://www.tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://www.tutego.de/blog/javainsel/)

## JDBC LOBs (Large Objects)

11.09.2013 · [Christian Ullenboom](https://www.tutego.de/blog/javainsel/author/admin/)

Auf der Datenbankseite gibt es zwei Typen für besonders große Daten: BLOB und CLOB. »B« steht für Binary und »C« für Character, also steht ein SQL BLOB für beliebig große Binärdaten und ein CLOB für beliebig große Textdaten.

Die LOBs unterscheiden sich von den anderen Datentypen dadurch, dass der Treiber erst dann die Daten überträgt, wenn sie auch angesprochen werden: Wird eine Zeile mit einer Zahl übertragen, 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ällt das allerdings nicht auf.

Für den BLOB gibt es in JDBC die Schnittstelle Blob und für CLOB Clob. In beiden Fällen können die großen Daten erfragt, aktualisiert und angelegt werden. Außerdem lässt sich die Länge erfragen und lassen sich ab einer bestimmten Position Daten auslesen.

#### Einen BLOB besorgen

Einem BLOB/CLOB steht genau, wie es für andere Datentypen entsprechende `getXXX()`-Funktionen gibt, eine `getBlob()`/getClob()-Funktion zur Verfügung. Der Unterschied besteht nur darin, dass `getInt()` direkt ein int zurückgibt, während `getBlob()` nur eine Referenz auf ein Blob-Objekt liefert, über die im zweiten Schritt die Daten zu beziehen sind.

**Beispiel:** Eine Tabelle Persons weist eine Spalte Image auf, die eine Grafik einer Person speichert. Die Grafik ist in einer Spalte vom Typ BLOB.

```java
ResultSet rs = stmt.executeQuery( "SELECT * FROM Persons" );
rs.first();
Blob data = rs.getBlob( "Image" );
```

data bezieht sich jetzt auf das Blob-Objekt. Es enthält noch nicht die Daten. Sie lassen sich zum Beispiel über die Methode `data.getBinaryStream()` beziehen. Damit lässt 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.

Kategorien: [Allgemein](https://www.tutego.de/blog/javainsel/category/allgemein/)

[← Alle Beiträge](https://www.tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Nostalgia: Das JavaBeans Development Kit (BDK)](https://www.tutego.de/blog/javainsel/2013/09/nostalgia-das-javabeans-development-kit-bdk.md)
- Next: [Kreditkartennummern in Java testen](https://www.tutego.de/blog/javainsel/2013/09/kreditkartennummern-in-java-testen.md)
