Blob to bytearray

Hi All,
I am creating REST web services. I fetch the Oracle blob content data from the DB using View Object.
Now I have convert Oracle blob content data to JSON. My service return as JSON.
thanks
Edited by: john sundar on May 3, 2012 12:33 AM
Edited by: john sundar on May 3, 2012 1:50 AM

You might have better luck with this over in the Development forum as I don't have much experience using SQL in AIR.  I've seen documentation for reading without AMF data present (as you are doing), but I suspect writing is not supported.

Similar Messages

  • Problem inserting Stream or ByteArray into Blob field.

    Hello,
    I am attempting to insert a file that has been converted into a byte array and also an input stream. When the file is less than 50kb it does successfully get inserted into the Blob field. When it is larger, it fails with the following stack trace:
    06/12/07 10:20:57 java.sql.SQLException: Invalid argument(s) in call
    06/12/07 10:20:57 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    06/12/07 10:20:57 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
    06/12/07 10:20:57 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
    06/12/07 10:20:57 at oracle.jdbc.dbaccess.DBItem.setArrayData(DBItem.java:270)
    06/12/07 10:20:57 at oracle.jdbc.dbaccess.DBItem.setArrayData(DBItem.java:246)
    06/12/07 10:20:57 at oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:2484)
    06/12/07 10:20:57 at oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.java:1219)
    06/12/07 10:20:57 at oracle.jdbc.driver.OraclePreparedStatement.setBytes(OraclePreparedStatement.java:2307)
    06/12/07 10:20:57 at com.evermind.sql.PreparedStatementBCELProxy.setBytes(PreparedStatementBCELProxy.java:201)
    06/12/07 10:20:57 at mil.dla.finance.issueTracker.AbstractIssueTrackerAction.insertNewIssueItem(AbstractIssueTrackerAction.java:265)
    06/12/07 10:20:57 at mil.dla.finance.issueTracker.WriteIssueAction.execute(WriteIssueAction.java:181)
    06/12/07 10:20:57 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
    06/12/07 10:20:57 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    06/12/07 10:20:57 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    06/12/07 10:20:57 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    06/12/07 10:20:57 at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    06/12/07 10:20:57 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    06/12/07 10:20:57 at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
    06/12/07 10:20:57 at oracle.security.jazn.oc4j.JAZNFilter.doFilter(Unknown Source)
    06/12/07 10:20:57 at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:16)
    06/12/07 10:20:57 at mil.dla.finance.common.filters.UserAuthFilter.doFilter(UserAuthFilter.java:201)
    06/12/07 10:20:57 at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:645)
    06/12/07 10:20:57 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:322)
    06/12/07 10:20:57 at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)
    06/12/07 10:20:57 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:270)
    06/12/07 10:20:57 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
    06/12/07 10:20:57 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
    06/12/07 10:20:57 at java.lang.Thread.run(Thread.java:534)
    Any assistance would be greatly appreciated.

    I thought I had found the answer here: http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/lob/LobToSP.html
    I adapted the Clob code to a Blob:
    private BLOB getBLOB( byte[] array)
    throws Exception {
    BLOB b = null;
    try {
    // create a new temporary BLOB
    b = BLOB.createTemporary( conn, true, BLOB.DURATION_SESSION );
    // Open the temporary BLOBin readwrite mode to enable writing
    b.open( BLOB.MODE_READWRITE );
    b.setBytes(array);
    // Get the output stream to write
    } catch ( Exception exp ) {
         // Free BLOB object
    b.freeTemporary( );
    // do something
    return b;
    however, it appears that the BLOB being returned is null, and when sent to the DB, nothing is actually written. So any help/suggestions would be greatly appreciated.
    Message was edited by:
    SFBell09

  • IMAGEIO IS WORKING BUT BYTEARRAY IS NOT WORKING:

    Hi all
    I am getting images from gmail contacts and trying to store it in DB
    using my http code:InputStream is=urlconnection.getInputStream();
    i could able to store the inputstream in file using:
    BufferedImage filebuffer=ImageIO.read(is);
    FileOutputStream fos=new FileOutputStream("picturerecent.jpg");
    ImageIO.write(filebuffer, "jpg", fos);
    but i was trying to store it in DB using the following code but it is not working.i am having a question that
    how it writing to a file without any problem.why not to database:
    try {
           String url = "jdbc:mysql://localhost:3306/";
             String db = "test";
             String driver = "com.mysql.jdbc.Driver";
                    Class.forName(driver);
                    con = DriverManager.getConnection(url+db,"root","");
                    try{
    PreparedStatement psmnt;
         psmnt = con.prepareStatement("insert into gmailphoto(id,Photo) "+ "values(?,?)");
         psmnt.setInt(1, 9);
         psmnt.setObject(2, is, java.sql.Types.BLOB);
         int s = psmnt.executeUpdate();
           Statement st = con.createStatement();
        try{
            ResultSet rs=st.executeQuery("select photo from gmailphoto where id=9");
            if(rs.next())
              {     //byte[] bytearray = new byte[4096];
                  int size=0;
                File sImage;
    //FIRST TRY
                FileWriter wr=new FileWriter(new File("c:\\imageOutput.jpg"));
                IOUtils.copy(rs.getBlob("photo").getBinaryStream(),wr);
                //SECOND TRY
                BufferedImage bf=ImageIO.read(new ByteArrayInputStream(rs.getBytes("photo")));
                FileOutputStream fout=new FileOutputStream(new File("C:\\imageOut"));
                if(bf!=null)ImageIO.write(bf, "jpg", fout);
                if(wr!=null)
                wr.flush();
                wr.close();
              rs.close();
           }}catch(SQLException e){
                System.out.println(e);
           }Thanks a lot for help

    but i was trying to store it in DB using the following codeThere is no code here that writes to a database. There are two lots of code that write to a file.

  • How to open a PDF File from a ByteArray

    Hi, Fellows,
    I'm having the following problem:
    I have put a PDF file inside a BLOB field in a table in my SQLite database.
    And I can retrieve it from this database without any problem, receiving a ByteArray data type as result.
    What I want to know is what I should do to render this file in my HTML flex object without saving it to a file…
    I used the mx.controls.HTML.data property, but what I see is the TEXT of my PDF file. The mx.controls.HTML.location needs a STRING with the link to a URL site or file.
    Thanks in advance for your help.
    Here, my code:
    <?xml version="1.0" encoding="utf-8"?>
    <mx:WindowedApplication xmlns:mx=" http://www.adobe.com/2006/mxml" layout="absolute" width="810" height="620"
          creationComplete="creationCompleteHandler();">
          <mx:Script>
                <![CDATA[
                      import flash.data.*;
                      import flash.filesystem.*;
                       private var _connection:SQLConnection;
                      private var _statement:SQLStatement; 
                 private function creationCompleteHandler():void {
                    var file:File = File.applicationStorageDirectory.resolvePath("arq.db");
                    _connection = new SQLConnection();
                    _connection.addEventListener(SQLEvent.OPEN, openHandler);
                    _connection.openAsync(file, SQLMode.CREATE);
                 private function openHandler(event:SQLEvent):void {
                    var sql:SQLStatement = new SQLStatement();
                    sql.sqlConnection = _connection;
                    sql.text = "CREATE TABLE IF NOT EXISTS arq(" +
                               "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                               "nome TEXT, " + 
                                "arquivo BLOB)";
                    sql.execute();        
                 private function insertFile(identificacao:String, caminho:String):void {
                            var sql:SQLStatement = new SQLStatement();
                            sql.sqlConnection = _connection;
                            var arquivo:File = new File(caminho);
                            var arqStream:FileStream = new FileStream();
                            arqStream.open(arquivo,SQLMode.READ);
                            var arqBlob:ByteArray = new ByteArray();
                            arqStream.readBytes(arqBlob);
                            arqStream.close();
                    sql.text = "INSERT INTO arq(nome, arquivo)" + 
                                "VALUES(@nome, @arquivo)";
                    sql.parameters["@nome"] = identificacao;
                    sql.parameters["@arquivo"] = arqBlob;
                    sql.execute();
                     trace("Arquivo inserido com Sucesso!!!");
                     lb1.text = "Arquivo inserido com Sucesso!!!";
                 private function selectFile(identificacao:String):void {
                             var sql:SQLStatement = new SQLStatement();
                            sql.sqlConnection = _connection;
                    sql.text = "SELECT id, arquivo FROM arq WHERE nome=@nome";
                    sql.parameters["@nome"] = identificacao;
                    trace(sql.text);
                    sql.addEventListener(SQLEvent.RESULT, apresentarDados);
                    sql.execute();
                 private function apresentarDados(event:SQLEvent):void {
                             var statement:SQLStatement = event.target as SQLStatement;
                            var result:SQLResult = statement.getResult();
                            if(result != null && result.data != null) {
                                  var dataset:Array = result.data;
                                  trace(dataset.length);
                            var arqBlob:ByteArray = dataset[0].arquivo;
                       var xx:HTMLLoader = new  HTMLLoader();
                      var ur:URLRequest = new URLRequest();
                      var ul:URLLoader = new URLLoader();
                       //Right now, it's doing nothing
    ur.contentType = "application/pdf";
                       ul.dataFormat = URLLoaderDataFormat.BINARY;
                      ul.data = arqBlob;
                       //Here is my problem - WHAT SHOULD I DO?
    pdfFile.data = arqBlob;
                           trace("Cheguei!!!");
                          lb1.text = "Cheguei!!!";
                             } else {
                                  trace("Não funcionou!!!")
                 private function sair():void {
                      this.exit();
                 ]]>
          </mx:Script>
          <mx:TextInput x="99" y="10" id="arq"/>
          <mx:Label x="10" y="12" text="Identificação:" width="81"/>
          <mx:Button x="168" y="40" label="Apresentar" click="selectFile(arq.text)"/>
          <mx:Button x="728" y="10" label="Sair" width="60" click="sair()"/>
          <mx:TextInput x="417" y="10" id="id1"/>
          <mx:TextInput x="417" y="40" id="cm1"/>
          <mx:Button x="585" y="12" label="Gravar" click="insertFile(id1.text, cm1.text)"/>
          <mx:Label x="291" y="12" text="Identificação:" width="105"/>
          <mx:Label x="291" y="42" text="Caminho Completo:" width="118"/>
          <mx:Label x="615" y="42" width="173" id="lb1"/>
          <mx:HTML id="pdfFile" width="800" height="520" y="79"/>
    </mx:WindowedApplication>

    Bob, Here's some ActionScript code for saving the byte array data to temporary file. (In this code, pdfData is a ByteArray object containing the PDF data.)
    var tempFile:File = File.createTempFile();
    var stream:FileStream = new FileStream();
    stream.open(tempFile, FileMode.WRITE);
    stream.writeBytes(pdfData);
    stream.close();
    Next you can load the file into your Flex HTML control (represented as html in the following code):
    html.location = tempFile.url;
    Here's more information on reading and writing files:
    http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7dc2. html (for Flex developers)
    http://help.adobe.com/en_US/AIR/1.5/devappsflash/WS5b3ccc516d4fbf351e63e3d118666ade46-7dc2 .html (for Flash developers)
    http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7dc2. html (for Ajax developers)

  • Unable to insert large blob data into DB

    Hi,
    I have written a piece of code which serializes a java object and writes it into a blob in DB.
    It works pretty fine for small objects of around 3 to 4 KB size, but I start getting trouble with larger objects.
    Here's my piece of code -
    private final static String QUERY_INSERT_AUDIT_DATA = "INSERT INTO " +
    "KAAS_AUDIT_DATA(object_id, object_type_cd, create_by, summary_data) VALUES (?, ?, ?, ?)";
    byte [] byteArray;
    bos = new ByteArrayOutputStream();
    oos = new ObjectOutputStream(bos);
    oos.writeObject(summaryData);
    oos.flush();
    oos.close();
    byteArray = bos.toByteArray();
    bos.close();
    ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
    BufferedInputStream buffInputSteam = new BufferedInputStream(bais);
    trace("addAuditSummary() : byteArray " + byteArray.length);
    trace("addAuditSummary() : buffInputSteam.available " + buffInputSteam.available());
    trace("addAuditSummary() : Calling Query to populating data");
    statement = conn.prepareStatement(QUERY_INSERT_AUDIT_DATA);
    statement.setString(1, objectId.toUpperCase());
    statement.setInt(2, objectType);
    statement.setString(3, createdBy);
    statement.setBinaryStream(4, buffInputSteam, buffInputSteam.available());
    statement.executeUpdate();
    statement.close();
    Basically, I am converting the object to BufferedInputStream to sent it to the BLOB(summary_data).
    The error I get is -
    ][30 Nov 2007 10:38:08] [ERROR] [com.hns.iag.kaas.util.debug.DebugDAO] addAuditSummary() : SQL exception occured while adding audit summary data for Object: BUSINESS_SO_BASE_DEAL
    ]java.sql.SQLException: Io exception: Connection reset by peer.
    at oracle.jdbc.dbaccess.DBError.throwSqlException(Ljava/lang/String;Ljava/lang/String;I)V(DBError.java:134)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(ILjava/lang/Object;)V(DBError.java:179)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(Ljava/io/IOException;)V(DBError.java:334)
    at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(Ljava/io/IOException;)V(TTC7Protocol.java:3675)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(BBI[B[Loracle/jdbc/dbaccess/DBType;[Loracle/jdbc/dbaccess/DBData;I[Loracle/jdbc/dbaccess/DBType;[Loracle/jdbc/dbaccess/DBData;I)V(Optimized Method)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(Loracle/jdbc/dbaccess/DBStatement;B[BLoracle/jdbc/dbaccess/DBDataSet;ILoracle/jdbc/dbaccess/DBDataSet;I)I(TTC7Protocol.java:1141)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout()V(Optimized Method)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate()I(Optimized Method)
    at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate()I(PreparedStatement.java:94)
    at com.hns.iag.kaas.util.debug.DebugDAO.addAuditSummary(Ljava/lang/String;ILjava/lang/Object;Ljava/lang/String;)V(DebugDAO.java:794)
    at com.hns.iag.kaas.servlets.sdm.action.SummaryAction.perform(Lcom/hns/iag/kaas/servlets/sdm/core/Event;Lcom/hns/iag/kaas/servlets/sdm/core/UserContext;)Ljava/lang/String;(SummaryAction.java:246)
    at com.hns.iag.kaas.servlets.sdm.SDMControllerServlet.process(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(SDMControllerServlet.java:213)
    at com.hns.iag.kaas.servlets.sdm.SDMControllerServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(SDMControllerServlet.java:128)
    at javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(HttpServlet.java:760)
    at javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run()Ljava/lang/Object;(ServletStubImpl.java:971)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Lweblogic/servlet/internal/FilterChainImpl;)V(ServletStubImpl.java:402)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run()Ljava/lang/Object;(WebAppServletContext.java:6354)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Lweblogic/security/subject/AbstractSubject;Ljava/security/PrivilegedAction;)Ljava/lang/Object;(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(Lweblogic/security/acl/internal/AuthenticatedSubject;Lweblogic/security/acl/internal/AuthenticatedSubject;Ljava/security/PrivilegedAction;)Ljava/lang/Object;(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(Lweblogic/servlet/internal/ServletRequestImpl;Lweblogic/servlet/internal/ServletResponseImpl;)V(WebAppServletContext.java:3635)
    at weblogic.servlet.internal.ServletRequestImpl.execute(Lweblogic/kernel/ExecuteThread;)V(ServletRequestImpl.java:2585)
    at weblogic.kernel.ExecuteThread.execute(Lweblogic/kernel/ExecuteRequest;)V(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:170)
    at java.lang.Thread.startThreadFromVM(Ljava/lang/Thread;)V(Unknown Source)
    I would really appreciate any help.
    Thanks
    Saurabh                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

    I would say, most likele BufferedInputStream.available() returns an incorrect length. available() does not return the length of the InputStream. See the javadocs for the details
    Additionally: it doesn't make sense at all to wrap the ByteArrayInputStream with a BufferedInputStream, the array is in memory already, so there is no need to buffer the read access to it (you are simply adding more overhead).
    Remove the BufferedInputStream (passing the bais directly to the setBinaryStream() method) and use byteArray.length to indicate the length of the data

  • I want to display BLOB image in JSP Using  html tags IMG src=

    GoodAfternoon Sir/Madom
    I Have got the image from oracle database but want to display BLOB image using <IMG src="" > Html tags in JSP page . If it is possible than please give some ideas or
    Send me sample codes for display image.
    This code is ok and working no problem here Please send me code How to display using html tag from oracle in JSP page.
    <%@ page import="java.sql.*" %>
    <%@ page import="java.io.*" %>
    <%@ page import="javax.swing.ImageIcon;" %>
          <%
            out.print("hiiiiiii") ;
                // declare a connection by using Connection interface
                Connection connection = null;
                /* Create string of connection url within specified format with machine
                   name, port number and database name. Here machine name id localhost
                   and database name is student. */
                String connectionURL = "jdbc:oracle:thin:@localhost:1521:orcl";
                /*declare a resultSet that works as a table resulted by execute a specified
                   sql query. */
                ResultSet rs = null;
                // Declare statement.
                PreparedStatement psmnt = null;
                  // declare InputStream object to store binary stream of given image.
                   InputStream sImage;
                try {
                    // Load JDBC driver "com.mysql.jdbc.Driver"
                    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
                        /* Create a connection by using getConnection() method that takes
                        parameters of string type connection url, user name and password to
                        connect to database. */
                    connection = DriverManager.getConnection(connectionURL, "scott", "root");
                        /* prepareStatement() is used for create statement object that is
                    used for sending sql statements to the specified database. */
                    psmnt = connection.prepareStatement("SELECT image FROM img WHERE id = ?");
                    psmnt.setString(1, "10");
                    rs = psmnt.executeQuery();
                    if(rs.next()) {
                          byte[] bytearray = new byte[1048576];
                          int size=0;
                          sImage = rs.getBinaryStream(1);
                        //response.reset();
                          response.setContentType("image/jpeg");
                          while((size=sImage.read(bytearray))!= -1 ){
                response.getOutputStream().write(bytearray,0,size);
                catch(Exception ex){
                        out.println("error :"+ex);
               finally {
                    // close all the connections.
                    rs.close();
                    psmnt.close();
                    connection.close();
         %>
         Thanks

    I have done exactly that in one of my applications.
    I have extracted the image from the database as a byte array, and displayed it using a servlet.
    Here is the method in the servlet which does the displaying:
    (since I'm writing one byte at a time, it's probably not terribly efficient but it works)
         private void sendImage(byte[] bytes, HttpServletRequest request, HttpServletResponse response) throws IOException {
              ServletOutputStream sout = response.getOutputStream();
              for(int n = 0; n < bytes.length; n++) {
                   sout.write(bytes[n]);
              sout.flush();
              sout.close();
         }Then in my JSP, I use this:
    <img src="/path-to-servlet/image.jpg"/>
    The name of the image to display is in the URL as well as the path to the servlet. The servlet will therefore need to extract the image name from the url and call the database.

  • Blob for binary file, read/write problems

    Hi,
    I am relatively new to this type of development so apologies if this question is a bit basic.
    I am trying to write a binary document (.doc) to a blob and read it back again, constructing the original word file. I have the following code for reading and writing the file:
    private void save_addagreement_Click(object sender, EventArgs e)
    // Save the agreement to the database
    int test_setting = 0;
    // create an OracleConnection object to connect to the
    // database and open the connection
    string constr;
    if (test_setting == 0)
    constr = "User Id=royalty;Password=royalty;data source=xe";
    else
    constr = "User ID=lob_user;Password=lob_password;data source=xe";
    OracleConnection myOracleConnection = new OracleConnection(constr);
    myOracleConnection.Open();
    // create an OracleCommand object to hold a SQL statement
    OracleCommand myOracleCommand = myOracleConnection.CreateCommand();
    myOracleCommand.CommandText = "insert into blob_content(id, blob_column) values 2, empty_blob())";
    OracleDataReader myOracleDataReader = myOracleCommand.ExecuteReader();
    // step 2: read the row
    OracleTransaction myOracleTransaction = myOracleConnection.BeginTransaction();
    myOracleCommand.CommandText =
    "SELECT id, blob_column FROM blob_content WHERE id = 2";
    myOracleDataReader = myOracleCommand.ExecuteReader();
    myOracleDataReader.Read();
    Console.WriteLine("myOracleDataReadre[\"id\"] = " + myOracleDataReader["id"]);
    OracleBlob myOracleBlob = myOracleDataReader.GetOracleBlobForUpdate(1);
    Console.WriteLine("OracleBlob = " + myOracleBlob.Length);
    myOracleBlob.Erase();
    FileStream fs = new FileStream(agreement_filename.Text, FileMode.Open, FileAccess.Read);
    Console.WriteLine("Opened " + agreement_filename.Text + " for reading");
    int numBytesRead;
    byte[] byteArray = new byte[fs.Length];
    numBytesRead = fs.Read(byteArray, 0, (Int32)fs.Length);
    Console.WriteLine(numBytesRead + " read from file");
    myOracleBlob.Write(byteArray, 0, byteArray.Length);
    Console.WriteLine(byteArray.Length + " written to blob object");
    Console.WriteLine("Blob Length = " + myOracleBlob.Length);
    fs.Close();
    myOracleDataReader.Close();
    myOracleConnection.Close();
    This gives the following console output:
    myOracleDataReadre["id"] = 2
    OracleBlob = 0
    Opened D:\sample_files\oly_in.doc for reading
    56832 read from file
    56832 written to blob object
    Blob Length = 56832
    My write to file code is:
    private void save_agreement_to_disk_Click(object sender, EventArgs e)
    string filename;
    SaveFileDialog savedoc = new SaveFileDialog();
    if (savedoc.ShowDialog() == DialogResult.OK)
    filename = savedoc.FileName;
    // create an OracleConnection object to connect to the
    // database and open the connection
    OracleConnection myOracleConnection = new OracleConnection("User ID=royalty;Password=royalty");
    myOracleConnection.Open();
    // create an OracleCommand object to hold a SQL statement
    OracleCommand myOracleCommand = myOracleConnection.CreateCommand();
    myOracleCommand.CommandText =
    "SELECT id, blob_column " +
    "FROM blob_content " +
    "WHERE id = 2";
    OracleDataReader myOracleDataReader = myOracleCommand.ExecuteReader();
    myOracleDataReader.Read();
    Console.WriteLine("myOracleDataReader[id] = " + myOracleDataReader["id"]);
    //Step 2: Get the LOB locator
    OracleBlob myOracleBlob = myOracleDataReader.GetOracleBlobForUpdate(1);
    Console.WriteLine("Blob size = " + myOracleBlob.Length);
    //Step 3: get the BLOB data using the read() method
    byte[] byteArray = new byte[500];
    int numBytesRead;
    int totalBytes = 0;
    FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
    while ((numBytesRead = myOracleBlob.Read(byteArray, 0, 500)) > 0)
    totalBytes += numBytesRead;
    fs.Write(byteArray, 0, byteArray.Length);
    Console.WriteLine("numBytes = " + numBytesRead + " totalBytes = " + totalBytes);
    Console.WriteLine((int)fs.Length + " bytes written to file");
    fs.Close();
    myOracleDataReader.Close();
    myOracleConnection.Close();
    This gives the following console output:
    myOracleDataReader[id] = 2
    Blob size = 0
    0 bytes written to file
    If I manually add the blob file using the following:
    DECLARE
    my_blob BLOB;
    BEGIN
    -- load the BLOB
    my_bfile := BFILENAME('SAMPLE_FILES_DIR', 'binaryContent.doc');
    SELECT blob_column
    INTO my_blob
    FROM blob_content
    WHERE id = 1 FOR UPDATE;
    DBMS_LOB.FILEOPEN(my_bfile, dbms_lob.file_readonly);
    DBMS_LOB.LOADFROMFILE(my_blob, my_bfile, DBMS_LOB.GETLENGTH(my_bfile), 1, 1);
    DBMS_LOB.FILECLOSEALL();
    COMMIT;
    END;
    COMMIT;
    The write to file works perfectly. This tells me that there must be something wrong with my code that is writing the blob to the database. I tried where possible to following the Oracle article using large objects in .NET but that (along with most things on the internet) focus on uploading text files.
    Thanks in advance.
    Chris.

    myOracleCommand.CommandText = "insert into blob_content(id, blob_column) values 2, empty_blob())";
    OracleDataReader myOracleDataReader = myOracleCommand.ExecuteReader();
    This looks wrong, you shouldn't be using ExecuteReader unless you expect to get a result back. Try using ExecuteNonQuery to do the insert.

  • Get canvas.toDataURL('image/jpeg') and convert base64 encoding to java.sql.Blob

    Convert canvas.toDataURL('image/jpeg') to java.sql.Blob.
    I am using oracle adf so I am able to action a backing bean from javascript and pass in parameters as a map. I pass in the canvas.toDataURL('image/jpeg') which I then try to decode in my bean. Using BASE64Decoder and the converting the bytearray to a file I can see the image is corrupted as I can't open the file thus converting the bytearray to blob is also a waste.
    Has anyone any ideas on base64 encoding from canvas.toDataURL to file or Blob?

    Use Case:
    A jsf page that enables a user to take photos using the HTML5 canvas feature - interact with webcam -, take photos and upload to profile
    1. I have created the jsf page with the javascript below; this pops up as a dialog and works okay and onclick an upload image, triggers the snapImage javascript function below and sends the imgURL parameter to the serverside managedbean
    <!-- java script-->
    function snapImage(event){
                    var canvas = AdfPage.PAGE.findComponent('canvas');
                    AdfCustomEvent.queue(event.getSource(),"getCamImage",{imgURL:canvas.toDataURL('image/jpeg'),true);
                    event.cancel();
    <!-- bean -->
    public void getCamImage(ClientEvent ce){
    String url=(String)ce.getAttributes().get("imgURL");
    decodeBase64URLToBlob(url);
    private BlobDomain decodeBaseB4URLToBlob(String url64){
                    BASE64Decoder de=new BASE64Decoder();
                    byte[] bytes=de.decode(url64);
                    File file=new File("abc.jpg");
                    InputStream in = new ByteArrayInputStream(bytes);
                    BufferedImage bImageFromConvert = ImageIO.read(in);
                    in.close();
                    ImageIO.write(bImageFromConvert, "jpg", file);
                    return createBlobDomainFromFile(file);
    ----problem---
    Accessing the generated jpeg file shows the image is corrupted, probably missing bytes or encode/decoder issues.and the blob image after uploading to database is saved as a binary stream which ondownload doesnt render as an image or anything i know of.
    Is there anyways of achieving the conversion without errors?

  • How to write bytearray  in sqlite

    I do not see where mentioned this problem.

    Hi,
    you've 3115 unrecognized token error - which could be for example that statement do not contains required/expected value - or contains value that is not recognized (unexpected) I think. Have you tried parameters?
    var sql:String = "INSERT INTO thumbnail (fileName, filePath, fileData) VALUES (@name, @path, @data)";
    ssm.text = sql;
    ssm.parameters["@name"] = name;
    ssm.parameters["@path"] = path;
    ssm.parameters["@data"] = data;
    or:
    var sql:String = "INSERT INTO thumbnail (fileName, filePath, fileData) VALUES (:name, :path, :data)";
    ssm.text = sql;
    ssm.parameters[":name"] = name;
    ssm.parameters[":path"] = path;
    ssm.parameters[":data"] = data;
    or:
    var sql:String = "INSERT INTO thumbnail (fileName, filePath, fileData) VALUES (?, ?, ?)";
    ssm.text = sql;
    ssm.parameters[0] = name;
    ssm.parameters[1] = path;
    ssm.parameters[2] = data;
    Your "data" needs to be ByteArray (as it is raw byte blob). You need parameters because (as in linked doc) when parametrized value is used it is directly:
    Values supplied as parameters using the SQLStatement.parameters associative array are assigned the storage class that most closely matches the native data type bound. For example  [...] ByteArray objects are given the BLOB storage class.
    When using object to be written as BLOB in SQL string literal (as in your sample) the previous paragraph in Adobe's docs says it is expected to provide data in special hexadecimal notation and I haven't yet seen someone using bytearray with that way of data conversion during sql injection  - but I've seen people using parametrized values to insert byte array into blob already.
    regards,
    Peter

  • Air 2.0/Flash/sqlite/blobs - not working - code copied...

    I'm having an impossible time with sqlite/blob fields in an Air 2.0 app.  Nothing I can do is getting them to load properly.  The documentation is very light about how to read them in.  Multiple unanswered threads exist in these forums showing the typical RangeError problem which appears to be fixed by a CAST in the SQL statement.
    Has anyone ever read a blob into Air 2.0/Flash?
    Code follows with comments showing results and issues...
    var sqlFile:File;
    var sqlConn:SQLConnection;
    var sqlStatement:SQLStatement;
    init();
    function init():void
         sqlConn = new SQLConnection();
         sqlConn.addEventListener(SQLEvent.OPEN, connOpenHandler);
         sqlConn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
         sqlFile = new File(File.desktopDirectory.nativePath);
         sqlFile = sqlFile.resolvePath("sample_with_blob.sqlite");
         sqlConn.open(sqlFile);
    function connOpenHandler(event:SQLEvent):void
         sqlStatement = new SQLStatement();
         sqlStatement.sqlConnection = sqlConn;
         sqlStatement.addEventListener(SQLErrorEvent.ERROR, errorHandler);
         readDB();
    function readDB()
         sqlStatement.addEventListener(SQLEvent.RESULT, selectResultHandler);
              // Note that this CAST to a ByteArray is needed or else a RangeError error is given
              // whenever a blob field is accessed
         sqlStatement.text = "SELECT CAST(blob_field AS ByteArray) as d FROM blob_table WHERE item=0;";
         sqlStatement.execute();
    function selectResultHandler(event:SQLEvent):void
         sqlStatement.removeEventListener(SQLEvent.RESULT, selectResultHandler);
         var result:SQLResult = sqlStatement.getResult();
         if (result.data != null) {
              var numRows:int = result.data.length;     // returns 1
              var row:Object = result.data[0];          // returns the record with a "d" property
              var ba:ByteArray = ByteArray(row.d);      // errors because row.d is a numeric 0
    I'm assuming that CAST is needed but I'm not totally sure that ByteArray is the type that should be used.  If the CAST is not used, a RangeError is produced.  I changed the CAST to String and did receive the first part of the blob field but it was immediately truncated when it encountered a binary null.
    What am I doing wrong?  Why isn't this CAST requirement for blobs documented anywhere?  Does this perhaps work with v2.5?
    Thanks for any suggestions.

    Chris - thanks for your reply.  I'm probably just a bit impatient - sorry!  Sunday?  Doesn't everyone work on Sunday?
    Yes, the database was created by another company and far outside Air.  It was a bit surprising that one blob created by Air is different than another blob in an sqlite db but I guess it is.  I've never seen anything mentioned about that.
    I looked at the Air 2.5 documentation - especially the what's new.  There was no mention of the CAST change.  Had I seen that, I would have saved about 5 hours of messing around.  I did finally find mention of it through google - searching on something like "air cast sqlite" - who knows what it was.  Eventually it hit on the document you referenced.
    It is working swimmingly well right now.
    I guess I was surprised by the couple of other threads that had gone totally unanswered here about similar things.  There are multiple threads talking about the RangeError with blob selects and no one had ever provided an inkling of help.  I'm sorry that I was impatient about it all.  I sort of was super stuck on a new development with this and it didn't seem like there was anyone out there listening.

  • How to split the blob byte array and insert in oracle

    how to split the blob byte array and insert in oracle
    I am having a string which is of more than lenght 4000 so i am using BLOB datatype as input to get the string.
    need to split the blob in oracle and store in the different column
    The string is of bytearray i need to strore it in each column based on the byte array.

    this will be my input i need to split the above and store it in different columns in a table.
    for spliting say
    Column1 -1 byte
    Column2-3 byte
    Column3-5 byte
    ColumnN-5 byte
    Table will have corresponding data type
    Column1 - number(10,2)
    Column2 - Float
    Column3 - Float
    ColumnN-Float
    here Column2 datatype is float but it will always have 3 byte information.
    where as Column3 datatype is also float but it will always have 5 byte information.
    Say N is Column 120

  • Images to Blob

    Hi.
    I'm passing images about in a data object, for display purposes.
    I'm retrieving it from a MySQL database using getBlob().getBytes() which works fine.
    My question is how do I get the image back into the database if need be - ie. get a bytearray or a stream from that image so I can place it in the blob?
    Thanks very much.

    http://forum.java.sun.com/thread.jsp?forum=48&thread=446603

  • Need help to open a blob from a report into another tab or browser window.

    Hello everyone.
    I'm looking for a bit of guidance on something I'm trying to do in Apex.
    I have a report that contains a blob. Users can click on the link to open it in same browser. I also know how to make it download if they click the link. But what I really want to do is to click the link and open the blob in another tab or browser window.
    Thank you in advance for your help.
    Dw
    I should have noted I'm using version 3.2
    Edited by: DW Brown on Feb 22, 2012 3:13 PM

    DW Brown wrote:
    It becomes a link from the column format section..
    DOWNLOAD:<tablename>:<column>:ID::MIMETYPE:FILENAME:LAST_UPDATE_DATE::inline:Click Here
    So far I haven't found a way to use something link "target=_blank"One way would be to use a Dynamic Action to apply the <tt>target="_blank"</tt> attribute to each link, or convert them to use APEX pop-ups or a jQuery lightbox like fancyBox.
    Create an example on apex.oracle.com if you need more assistance.

  • Help, how to open and display blobs from tables

    Dear all,
    I am trying to store ms-word files on a table using a blob column.
    Does anyone how to open the files and display them from a form using 9iAS?
    Thank you.
    Carlos.

    And there may be, but you won't likely find that here. Do some time searching Google and maybe you'll find code that someone was nice enough to make freely available, although I wouldn't count on it. Were i a programmer and took the time to read those docs and write the code, I'd want to be paid for my time. But there are a lot of programmers who swear by freeware! You may get lucky.

  • How to retrieve all the data from a BLOB using view-generated accessor

    I am using JDeveveloper 10g v. 10.1.3 and am storing an image in a database as a blob object and need to retrieve all of the data to get the entire image and store it in an ImageIcon. The code I have works partially in that it retrieves the correct data, but only gets a piece of it, leaving me with a partial image.
    AppModuleImpl am;
    ImageVwViewImpl vo;
    am = (AppModuleImpl)panelBinding.getDataControl().getDataProvider();
    vo = (ImageVwViewImpl)am.findViewObject("ImageVwView");
    ImageVwViewRowImpl ivo = (ImageVwViewRowImpl)vo.getCurrentRow();
    ImageIcon icon = new ImageIcon(ivo.getImage().getBytes(1, (int)ivo.getImage().getBufferSize()));
    jULabel1.setIcon(icon);I either need to know how to use a stream to get the data out (from BlobDomain method getBinaryStream()), or how to get the other chunks of data separately.
    edit: I know the problem is that getBufferSize() returns an int which is too small to hold all the data, but need to know what to use instead. Thanks!

    This is the code I'm using now. Same problem :(
    AppModuleImpl am;
            ImageVwViewImpl vo;
            am = (AppModuleImpl)panelBinding.getDataControl().getDataProvider();
            vo = (ImageVwViewImpl)am.findViewObject("ImageVwView");
            ImageVwViewRowImpl ivo = (ImageVwViewRowImpl)vo.getCurrentRow();  
            ImageIcon icon = new ImageIcon(ivo.getImage().toByteArray());
            jULabel1.setIcon(icon);

Maybe you are looking for

  • Disk repair button in disk utility greyed out and I cant repair my disk

    Safari stopped working totally and I downloaded it again but it wont allow me to install it onto the hard drive saying it cant use the software. Disk utility has detected that the disk needs repair but the repair button is blanked out. Also I have pa

  • Memos won't sync

    My memos will not sync to my Palm Zire 72. All other data works fine and the memos are still in the Palm Desktop app. The conduit seems to be set up properly. Any ideas? Post relates to: Zire 72

  • Sap script convert to pdf and then send to email

    Hi, good day sap guys ive dev the sap scipt for customer statemnet one which is used the t.code is f.27. i need to convert the sap script to pdf and then send to email. plz let me know.. how to do it. regards chandu

  • BigDecimal UDF Help

    Hi all, I have a requirement for a UDF: Should be of type Context: a (Amount goes here from source)            b (Posting Key goes here from source)      Result list: Goes to Target Amount Below is my current code: for(int x = 0;x<a.length;x++){   if

  • Acrobat Reader X druckt falsche Buchstaben / prints wrong letters

    Nach dem Update auf Acrobat Reader 10.0.0 / 10.0.1 werden spontan Buchstaben, Ziffern und Zeichen um 1 versetzt ausgedruckt (z.B. S statt R, 2 statt 1). Beim wiederholten Ausdruck kann das Ergebnis korrekt sein. Betriebssystem: Windows XP / SP3 mit a