# Java Stored Procedure - kleines Problem



## boeser_micha (22. Februar 2007)

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


----------



## Thomas Darimont (22. Februar 2007)

Hallo,



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


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


----------



## boeser_micha (23. Februar 2007)

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


----------

