Olga_ Geschrieben 27. Februar 2009 Geschrieben 27. Februar 2009 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) Zitieren
Empfohlene Beiträge
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.