Newsgroup: it.comp.java
Titolo: Campo blob

Ciao, ho scritto una classe che inserisce dei dati nel db (Oracle). 
In particolare devo inserire un file in un campo di tipo blob. Il mio
problema è questo: se inserisco un txt va tutto ok, mentre se tento
d'inserire un pdf o un doc mi dà l'eccezzione:
Exception during commit/rollback operation
Da cosa può dipendere?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

ma come fai a salvarlo?
io uso:
PreparedStatement pstmt = con.prepareStatement("UPDATE PMT00114 SET BL_1 =
?");
pstmt.setBlob(1, inBlob);
int nupd = pstmt.executeUpdate();
dove inBlob e' un oggetto con Blob come interfaccia ma non me lo salva.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 dove inBlob e' un oggetto con Blob come interfaccia ma non me lo salva.
-- 


Io uso il codice incollato qui sotto e funzona benissimo.
Spero ti possa essere utile.
ciao ale
import java.sql.*;
import java.io.*;
import java.util.*;
import java.lang.*;
import oracle.sql.BLOB;
import oracle.jdbc.driver.OracleResultSet;
import com.Ostermiller.util.Base64;
class SetBlob
{
   public static void main (String args [])
       throws SQLException, IOException
   {
   Connection DBconnection;
   PreparedStatement ps;
   OracleResultSet rs = null;
     try
	  {
	//Connessione al DB oracle, se non si riesce a connettere si interrompe 
il programma
     System.out.println ("Loading Oracle driver");
     try
     {
	  //Specifico i driver di connessione al DB
       Class.forName ("oracle.jdbc.driver.OracleDriver");
     }
     catch (ClassNotFoundException e)
     {
       System.out.println ("Could not LOAD the driver");
       e.printStackTrace ();
     }
     System.out.println ("Connecting to the oracle database");
	//Creo una nuova connessione al DB dando l'indirizzo di rete, login e pwd
     DBconnection = DriverManager.getConnection 
("jdbc:oracle:thin:ra2000/ra2000@dhcp100:1521:ra2k");
 
	DBconnection.setAutoCommit( false );
	 // Prepare the blob column.
	 ps = DBconnection.prepareStatement(
		"UPDATE arcreportprint SET reportdata = EMPTY_BLOB() WHERE reportcode 
= ?" );
	 ps.setString( 1, "30784" );
	 ps.execute();
	 ps.close();
	 // Select the blob column for update.
	 // An OracleResultSet will be used.
	 ps = DBconnection.prepareStatement("SELECT reportdata FROM 
arcreportprint WHERE reportcode = ? FOR UPDATE" );
	 ps.setString( 1, "30784" );
	 rs = (OracleResultSet) ps.executeQuery();
	 // Throw an exception if the blob reference was not retrieved.
	 if( ! rs.next() )
		throw new SQLException( "Unable to retrieve BLOB reference.");
	// The type returned is the BLOB type defined by Oracle.
      BLOB b = (BLOB) rs.getBlob( 1 );
	 // Get an output stream from the blob and get an input stream
	 // from the byte array.  Then simply read from one to the
	 // other.  The BLOB.getBufferSize() returns what Oracle thinks
	 // the optimal buffer size should be.
 
	 OutputStream os = ((oracle.sql.BLOB)b).getBinaryOutputStream();
	 File blobFile = new File("C:/sampledir/prove/blob/vi.pdf");
	 Base64.encode(blobFile);
	 InputStream fileStream = new FileInputStream(blobFile);
	 byte[] buffer = new byte[10* 1024];
 
	 int nread = 0;
	 while( (nread= fileStream.read(buffer)) != -1 ){
		os.write(buffer, 0, nread);
	 }
	 os.close();
	 fileStream.close();
 
	 // Commit the changes.
	 DBconnection.commit();
	 rs.close();
	 ps.close();
	 DBconnection.rollback();
	 DBconnection.close();
	 blobFile.delete();
	 }
	catch( Exception e )
       {
          e.printStackTrace();
       }
 
   }
}
-- 
-------------------------------------------------------------
Comitato per la salvaguardia delle aquile di wez, orsi del kispios e 
canguri mahori.

Ok, grazie.


Scusami ancora, ma dove posso trovare i package di oracle?
Grazie,
ciao
