Zum Inhalt springen

BLOB-Feld in Oracle DB


Olga_

Empfohlene Beiträge

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...