Java Stored Procedure - kleines Problem

boeser_micha

Grünschnabel
Guten Morgen,

ich habe da ein hoffentlich kleines Problem mit Java in der Oracle –Datenbank.
Ich habe schon paar *.Java , *.Classes und *.Jar Dateien in die Datenbank geladen und es
funktioniert auch soweit alles prima.

Umgebung:
Oracle 10.2 auf HPUX,.Das Verzeichnis, aus dem ich lesen möchte, steht in der Verzeichnisliste unter UTL_FILE_DIR, d.h. Oracle kann dort generell Lesen und Schreiben. Ich habe auch das Grant erstmal für genau eine Datei, die ich laden möchte, vergeben.

dbms_java.grant_permission( 'GDV', 'SYS:java.io.FilePermission','/oracle02/batch/SPOCK/Angebotsanfrage2.TIF', 'read' )


Rechte auf diese Datei habe ich entsprechend geprüft -> lesender Zugriff möglich.


Mein Problem:
Ich möchte einfach ein simples BLOB aus dem Verzeichnis lesen. Das Programm (nur Ausschnitt, Rest uninteressant) ist aber nicht mal in der Lage (also ich auch nicht :D ) den FileInputStream zu öffnen. Wenn ich einen Dateinamen Angebe, für das ich keinen Grant vergeben habe, kommt die übliche Permission blahblah Meldung. Mit der korrekten Datei erhalte ich aber immer

java.lang.NullPointerException at TiffToPDF.ReadFileString(TiffToPDF:69) Position 69 verweist auf die Zeile FileInputStream in = new FileInputStream(datei)

Auszug Programm:

public static String ReadFileString( String datei )
{
try {
BLOB binDat = null;
FileInputStream in = new FileInputStream(datei);
try {
OutputStream out = binDat.getBinaryOutputStream();
int chunk = binDat.getChunkSize();
int length;
byte[] buffer = new byte[chunk];
while ((length = in.read(buffer)) != -1){
out.write(buffer,0,length);}
in.close();
out.close();




Irgendwie ist mir nicht so klar, ob ich noch irgendwelche anderen Berechtigungen o. sonst was brauche um eine File zu lesen.

select * from dba_java_policy
where grantee = 'GDV';


ergibt:

KIND GRANTEE TYPE_SCHEMA TYPE_NAME NAME ACTION ENABLED SEQ
GRANT GDV SYS java.io.FilePermission /oracle02/batch/SPOCK/Angebotsanfrage2.TIF read ENABLED 161


Was mache ich falsch

Grüße und vielen Dank

Michael
 
Hallo,

java.lang.NullPointerException at TiffToPDF.ReadFileString(TiffToPDF:69) Position 69 verweist auf die Zeile FileInputStream in = new FileInputStream(datei)

Auszug Programm:

public static String ReadFileString( String datei )
{
try {
BLOB binDat = null;
FileInputStream in = new FileInputStream(datei);
try {
OutputStream out = binDat.getBinaryOutputStream();
int chunk = binDat.getChunkSize();
int length;
byte[] buffer = new byte[chunk];
while ((length = in.read(buffer)) != -1){
out.write(buffer,0,length);}
in.close();
out.close();
Bist du da ganz sicher?

BLOB binDat = null;
FileInputStream in = new FileInputStream(datei);
try {
OutputStream out = binDat.getBinaryOutputStream();
ich würde sagen, dass Problem könnte auch sein, dass binDat noch null ist wenn du mit getBinaryOutputStream() darauf zugreifen willst.

Gruß Tom
 
Grüße,

du hast vollkommen recht, das Problem habe ich aber erst erkannt, als ich dbms_java.set_output(5000); aktiviert hatte. Ich schreibe recht viel Quellcode in PLSQL, u. dies ist mein ersten Code in Java (bis auf ein paar kleinere Programme) u. dann noch in der Datenbank. Aus dieser Erkenntnis, woran es lag, ist aber ein anderes Problem erwachsen ;-) :

Ich würde gerne in mein Blob binDat Daten schreiben aus einem Stream. Geht das überhaut ?

Ich habe mir die Beschreibung für oracle.sql.BLOB angeschaut:

http://download-east.oracle.com/otn.../904preview/jdbc-javadoc/oracle/sql/BLOB.html

Aber irgendwie funktioniert das nicht wirklich. Ich habe putBytes () verwendet (möglicherweise falsch?)

Ich möchte etwas in der art machen (kann natürlich falsch sein):


BLOB binDat;
binDat = BLOB.empty_lob();
// fbuffer ist ein gefülltes byte []
binDat.putBytes (1,fbuffer ); ;



Ich erhalte als Fehlermeldung:


java.sql.SQLException: Ungültiger leerer LOB-Vorgang
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:190)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:286)
at oracle.sql.BLOB.getDBAccess(BLOB.java:1491)
at oracle.sql.BLOB.setBytes(BLOB.java:1131)
at oracle.sql.BLOB.putBytes(BLOB.java:436)
at TiffToPDF.ReadFile(TiffToPDF:80)




Ach ja, ist prima Forum :) Im Gegensatz zu vielen anderen Foren findet man vernünftige Tipps und das Forum lebt. Werde, falls es Themen gibt z.B. Oracle, PLSQL, Delphi usw., mich entsprechend einbringen.

Gruß und Danke
Micha
 
Zurück