Zum Inhalt springen

BLOB-Feld in Oracle DB


Empfohlene Beiträge

Geschrieben

Hallo Leute,

ich muss ein Objekt mit dem Attribut von dem Datentyp BLOB aus einer in Java-geschriebenen Web-Anwendung in der Oracle-DB speichern. Unten folgt die Beschreibung

Wenn jemand die Vorgehensweise kennt oder eine Idee hätte...

im Voraus besten Dank für jede Unterstützung.

Olga.

Oracle:

Das Feld in der DB-Tabelle Meine_Tabelle: "BEGRUENDUNG" BLOB

Mit dem Benutzer System habe ich einen tablespace angelegt:

create tablespace lobs

datafile 'lobs.dbf'

size 5M

extent management local uniform size 1M

Dann die Tabelle geändert:

alter table Meine_Tabelle

move lob (begruendung) store as (tablespace LOBS storage (initial 100k next 100k pctincrease 0)

chunk 16k pctversion 10 nocache logging)

Bei der Abfragen

select begruendung from Meine_Tabelle

oder

select begruendung from Meine_Tabelle FOR UPDATE

kommt die Fehlermeldung:

ORA-00932: Inkonsistente Datentypen: NUMBER erwartet, BLOB erhalten

Ein Update mit

update Meine_Tabelle set begruendung = EMPTY_BLOB() ändert nichts an der Sache.

Mapping:

<field-descriptor id="16"

name="begruendung"

column="BEGRUENDUNG"

jdbc-type="BLOB"

primarykey="false"

/>

Java:

import oracle.sql.BLOB;

private BLOB begruendung;

Die Infromationen, die in dem BLOB-Feld gespeichert werden sollen habe ich in Form eines Strings. Für die Speicherung in der DB versuche ich daraus ein BLOB zu erzeugen:

byte[] blobBites = this.begruendungStr.getBytes();

begruendung = BLOB.empty_lob();

begruendung.setBytes(1,blobBites);

Statische Methode BLOB.empty_lob() liefert kein BLOB-Objekt, sondern null zurück. Ich bin mir auch nicht sicher, dass ich für das von dieser Methode gelieferten Blob-Objekt die Methode begruendung.setBytes(1,blobBites) ausführen kann. Ausprobieren kann ich auch nicht, da ich kein BLOB-Objekt erzeugen kann (Es gibt keinen Konstruktor für die BLOB-Klasse new BLOB())

Für die Methode BLOB.createTemporary(Connnection , boolean, int) brauche ich die Connection zu der DB. Da ich aber alle DB-Zugriffe über DAOs verwalte, habe ich nicht wirklich die Connection in meiner Struts-Form. Rein theoretisch kann man sie von DAO mit einer public-Methode holen. Das passt natürlich nicht zu dem Konzept und unsere Erfahrungen sagen, dass die Connection dann auch nicht zuverlässig ist.

So lange der Befehl

update Meine_Tabelle set begruendung = EMPTY_BLOB() nicht ausgeführt wurde, ist in Java nach dem Lesen des Objektes aus Oracle das Attribut Begrundung = null.

Wenn aber das Feld ein EMPTY_BLOB enthält, bekomme ich einen Fehler schon bei Mapping:

Caused by: java.lang.IllegalArgumentException: Can not set oracle.sql.BLOB field de……….begruendung to [b

at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)

at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)

at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)

at java.lang.reflect.Field.set(Field.java:657)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...