Help with
SQL BLOB
I have a file which I want to store into oracle database. I'm using the Blob object. I want to know how to convert this text file (can also be other types) into a blob object and store it. I did not find any examples on the net. Kindly send me a sample file which does the same! Thanks. Jyothi Guess this is the code you require. Insert The following code snippet reads a file and stores it into the database: // variables String strStatement; Statement stmt = null; ResultSet resSet = null; InputStream sampleFileStream = null; OutputStream blobOutputStream = null; try { // create a statement (connection is already existent) stmt = dbConn.createStatement(); // get new id strStatement = " SELECT lobsamp_seq.nextval" + " FROM dual"; resSet = stmt.executeQuery(strStatement); if (resSet.next()) { lngId = new Long(resSet.getLong(1)); } // insert new row // The LOB column value is initialized to empty in this step, // and will be loaded in the steps below. stmt.execute(" INSERT INTO lobsamp " + " (id" + " ,blob_col" + " ) VALUES " + " (" + lngId + " ,empty_blob()" + " )"); // Retrieve BLOB locator strStatement = " SELECT blob_col" + " FROM lobsamp" + " WHERE id = " + lngId + " FOR UPDATE"; resSet = stmt.executeQuery(strStatement); if (resSet.next()) { // Get the BLOB locator and open output stream for the BLOB BLOB bCol = ((OracleResultSet)resSet).getBLOB(1); blobOutputStream = bCol.getBinaryOutputStream(); // Open the sample file as a stream for insertion // into the BLOB column File file2Load = new File(strDirectory + strFile); sampleFileStream = new FileInputStream(file2Load); // Buffer to hold chunks of data to being written to the BLOB. byte[] bBuffer = new byte[bCol.getBufferSize()*NUMCHUNKS]; // Read a chunk of data from the sample file input stream, // and write the chunk to the BLOB column output stream. // Repeat till file has been fully read. int intBytesRead = 0; // read from file until done while ((intBytesRead = sampleFileStream.read(bBuffer)) != -1) { // write to BLOB blobOutputStream.write(bBuffer,0,intBytesRead); } // closing the streams and committing sampleFileStream.close(); blobOutputStream.close(); dbConn.commit(); } } catch (Exception ex) { try { dbConn.rollback(); } catch (Exception e) {} } finally { try { sampleFileStream.close(); } catch (Exception e) {} try { blobOutputStream.close(); } catch (Exception e) {} try { stmt.close(); } catch (Exception ! e) {} }Vinod. ------------------------- Here is the sample: import java.sql.*; import java.io.*; import oracle.jdbc.driver.*; public class ExonCLOB { Connection con; Statement st,st1; oracle.jdbc.driver.OraclePreparedStatement pstmt; ResultSet rs; public ExonCLOB() { try{ Class.forName("oracle.jdbc.driver.OracleDriver"); oracle.jdbc.driver.OracleConnection con= (oracle.jdbc.driver.OracleConnection)DriverManager.getConnection ("jdbc:oracle:thin:@a1:1521:informa","scott","tiger"); File f=new File("ExonCLOB.java"); DataInputStream dis=new DataInputStream(new FileInputStream(f)); byte b1[]=new byte[(int)f.length()]; oracle.sql.CLOB clob=new oracle.sql.CLOB(con); System.out.println(clob); OracleClobWriter writer=new OracleClobWriter (clob,b1.length); System.out.println("clob Inserting ........."); String str=dis.readLine(); while(str!=null) { System.out.println(str); writer.write(str.toCharArray(), 0, str.length()); str=dis.readLine(); } System.out.println("Inserting ........."); System.out.println(clob); System.out.println(clob.getCharacterStream()); pstmt=(oracle.jdbc.driver.OraclePreparedStatement) con.prepareStatement("update exclob set info=? where empid=?"); System.out.println(pstmt); pstmt.setObject(1,clob,2005); pstmt.setInt(2,10); System.out.println(" After setting pstmt"); int i=pstmt.executeUpdate(); System.out.println(" After execute update"); System.out.println(i+" records updated"); System.out.println("Retriving......."); oracle.jdbc.driver.OracleResultSetImpl rs= (oracle.jdbc.driver.OracleResultSetImpl)st1.executeQuery("select info from exclob where empid=10"); System.out.println(rs); if(rs.next()) { System.out.println("in if"); oracle.sql.CLOB b=rs.getCLOB(1); Reader is=b.getCharacterStream(); f=new File("read.java"); FileOutputStream fos=new FileOutputStream(f); i=is.read(); System.out.println("i ="+i); while(i!=-1) { fos.write(i); i=is.read(); System.out.print(i); }// while() System.out.println("retrived"); }// if }catch(Exception e){ e.printStackTrace(); } } public static void main(String s[]) { ExonCLOB e=new ExonCLOB(); } }And BLob will be just like this only. Try the sample and let me know the one you have done :) Shyam Kris
See also
Ask It in The Java Forum Java Books
Return to : Java Programming Hints and Tips All the site contents are Copyright © www.erpgreat.com
and the content authors. All rights reserved.
|