Newsgroup: it.comp.java
Titolo: Blob

Ciao a tutti,
volevo chiedervi se avete qualche esempio su come utilizzare i campi
blob da Java.
In particolare non riesco a capire come fare le insert nella tabella che
contiene i campi Blob.
Ciao Daniele
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
news:7695c7897317f2f67a8...@mygate.mailgate.org...


Qualcuno ha qualche esempio su come valorizzare un campo Blob di una
tabella?


 
Vedi se i seguenti metodi ti possono fare al caso tuo
ciao
	/**
	 *	 Inserisce un file in campo BLOB della tabella Oracle 
<tableName>:
	 *
	 *	<tableName>
	 *	-----------------------------------------
	 *	FILE_CODE	|		FILE_CONTENT		|
	 *	------------------------------------------
	 *
	 *	L'oggetto BLOB utilizzato č instanziato da oracle.sql.BLOB
	 *  Per inserire il BLOB (contenuto del file) bisogna prima
	 *  inserire un empty_blob per creare un BLOB locator.
	 *  Poi utilizzando il BLOB locator definito, si carica la tabella
	 *  con il file specificato in <filePath>.
	 *
	 *  @param insertQuery statement SQL per definire un BLOB Locator
	 *  @param selectQuery statement SQL per estrarre il BLOB Locator 
da caricare
	 *	@param filePath il percorso assoluto del file da caricare nel 
BLOB
	 *  @return void
	 */
	public void writeBlob(String insertQuery, String selectQuery, 
String filePath) throws Exception
	{
		BLOB blob=null;
		Statement objStatement = null;
		ResultSet objResultSet = null;
		FileInputStream instream = null;
		OutputStream outstream = null;
		File binaryFile = null;
	//	String query="";
	//	query="INSERT INTO "+tableName+" VALUES ("+fileCode+", 
empty_blob())";		
		out("createBLOBLocator: \n"+insertQuery);	
 
		try
		{
			String exec =execWrite(insertQuery); 
			if(!(exec.equals("1")))
			{
				throw new Exception(exec);
			}
			objStatement = connection.createStatement();	
			objResultSet = objStatement.executeQuery(selectQuery);
			if (objResultSet.next())
			{
				blob = (BLOB)objResultSet.getObject(1);
			}
/**
 *	Si definisce un oggetto File con cui maneggiare il file da 
caricare,
 *  con l'oggetto File si crea un oggetto FileInputStream per leggere il 
contenuto	
 *	del file e un oggetto OutputStream per recuperare il BLOB come uno 
stream 	
 */
				binaryFile = new File(filePath);
				System.out.println("length = " + 
binaryFile.length());
	    		instream = new FileInputStream(binaryFile);
	    		outstream = blob.getBinaryOutputStream();
/**
 *	Il metodo getChunkSize() determina ideale chunk size per scrivere 
il file nel BLOB
 *	creando la giusta dimensione del buffer byte array. 
 */
	    		int chunk = blob.getChunkSize();
				byte[] buffer = new byte[chunk];
				int length = -1;
/**
 *	Usa il metodo read() per leggere il file e porlo nel byte array 
buffer, 
 *	poi usa il metodo write() per scriverlo nel BLOB. 
 */
				while ((length = instream.read(buffer)) != -1)
				{
					outstream.write(buffer, 0, length);
				}
 
			}catch(Exception error1)
			{
				throw new Exception(error1.getMessage());
			}	
				finally 
				{
/**
 *	 Č necessario chiudere input and output streams		
 *   e i Statement e Resulset aperti.
 */ 
					try
					{
						if(!(instream==null)) {instream.close
();}
						if(!(outstream==null)) 
{outstream.close();}
						if(!(objResultSet==null)) 
{objResultSet.close();}
						if(!(objStatement==null)) 
{objStatement.close();}						
 
 
					}catch (Exception error2) 
					{							
 
						throw new Exception(error2.getMessage
());						
					}
				}
		}
/**
 *	 Legge un file dal campo BLOB della tabella Oracle <tableName>:
 *	
 *	<tableName>
 *	-----------------------------------------
 *	FILE_CODE	|		FILE_CONTENT		|
 *	------------------------------------------
 *	 
 *	L'oggetto BLOB utilizzato č instanziato da oracle.sql.BLOB    
 *
 *  @param tableName nome della tabella in cui č contenuto il BLOB
 *	@param filePath il percorso assoluto di dove viene registrato il 
file estratto dal BLOB
 *  @return void	 
*/
	public void readBlob(String query, String filePath) throws 
Exception
	{
		InputStream instream=null;
		FileOutputStream writer=null;
		BLOB blob=null;
 
		Statement objStatement = null;
		ResultSet objResultSet = null;
		int length=0;
		String fileName="";
 
		try
		{
			objStatement = connection.createStatement();	
			objResultSet = objStatement.executeQuery(query);
			if (objResultSet.next())
			{
				fileName = objResultSet.getString(1);		
 
				blob = (BLOB)objResultSet.getObject(2);
			}
		filePath+="/"+fileName;	
/**
 *	Si scrive il file letto nel BLOB utilizzando un oggetto 
FileOutputStream
 *	inizializzato con il percorso assoluto <filePath>
 */
			instream =blob.getBinaryStream();			
			writer = new FileOutputStream(filePath);
 
 			int outByte;
 			while ((outByte =  instream.read()) !=-1) 
			{
	 			writer.write(outByte); 			 
			}
		}catch(Exception error1)
		{
			throw new Exception(error1.getMessage());
		}	
			finally 
			{
				try
				{
					if(!(instream==null)) {instream.close();}
					if(!(writer==null)) {writer.close();}
					if(!(objResultSet==null)) 
{objResultSet.close();}
					if(!(objStatement==null)) 
{objStatement.close();}
				}catch (Exception error2) 
				{								
					throw new Exception(error2.getMessage());	
 
				}
			}
	}