Upload + Gravar campo Blob (Oracle)

Olá senhores,

visito o site e acompanho as discursões há algum tempo, estou há 1 semana com um problema que está me deixando preocupado demais!

quero fazer upload de imagens e gravar em um campo blob do oracle, para isso, após ler vários exemplos - até mesmo daqui - obtive uma biblioteca do JavaZoom, fiz vários testes, tudo gravou lindamente, peguei o add-ons para Servlet, e também funcionou…

porém o servlet grava em um filesystem, fiz uma customização para gravar no banco, bem isso já funcionava, simplesmente dá erro…

SQLException: fetch out sequence

cara, tá certinho… eu acho… me matei, ninguém aqui na sala fez um código semelhante ou precisou disso, pelo amor de Deus, me ajudem!

package br.com.webmusic.sample;

import br.com.webmusic.dao.ConnectionManager;
import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import java.util.Properties;
import javazoom.upload.*;
import javazoom.upload.parsing.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Vector;

/**
 * This servlet uses UploadBean to upload a file to a folder.
 * Default folder is $WEBAPP_HOME/WEB-INF/
 */
public class UploadServlet extends HttpServlet
{
  /**
   * Processes upload to a folder.
   */
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
    String error = null;
    String idArt = null;    
    PrintWriter out = response.getWriter();
    out.println("<html><head></head><body>");

    try{
      UploadBean upBean = new UploadBean();

      if (MultipartFormDataRequest.isMultipartFormData(request)){
           // Uses MultipartFormDataRequest to parse the HTTP request.
           MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
           String todo = null;

           if (mrequest != null) todo = mrequest.getParameter("todo");
           if (mrequest != null) idArt = mrequest.getParameter("idArt");
           
           if ( (todo != null) && (todo.equalsIgnoreCase("upload")) ){
              Hashtable files = mrequest.getFiles();
              if ( (files != null) && (!files.isEmpty()) ){
                  UploadFile file = (UploadFile) files.get("arquivo");
                  if (file != null) out.println("<li>Form field : uploadfile"+"<BR> Uploaded file : "+file.getFileName()+" ("+file.getFileSize()+" bytes)"+"<BR> Content Type : "+file.getContentType());
                  // Uses the bean now to store specified by jsp:setProperty at the top.
                  //upBean.store(mrequest, "arquivo");
                  insert(file,idArt);
                  out.println("<li>uploaded files");
              }else{
                out.println("<li>No uploaded files");
              }
           }
      }
    }catch( Exception e ){
      e.printStackTrace();
    }
    out.println("</html>");
    out.close();
    //response.sendRedirect("OpenImage?idA=" + idArt);
  }
 
 
  private void insert(UploadFile file, String idArt ) throws UploadException{
    String EMPTYBLOB = "empty_blob()";

    // Insert an empty blob.
    Connection c = ConnectionManager.getInstance();



    String sql = "INSERT INTO artista_foto (id, id_art, nm_arquivo, bt_arquivo) VALUES (?,?,?,"+EMPTYBLOB+")";
    PreparedStatement ps = null;
    ResultSet r = null;

    // obter o id da foto
    String sqlId = "select artista_seq.nextval ida from dual";
    Statement s = null;

    try{
      ps = c.prepareStatement(sql);

      int idA = 0;
      int id = Integer.parseInt( idArt );
      
      s = c.createStatement();
      r = s.executeQuery(sqlId);
      if( r.next() )idA = r.getInt("ida");
      
      r.close();
      
      ps.setInt(1,idA);
      ps.setInt(2,id);
      ps.setString(3,file.getFileName());
      int modified = ps.executeUpdate();

      // Selects the lob for update.
      String sql1 = "SELECT bt_arquivo FROM artista_foto WHERE id = ? FOR UPDATE";      
      PreparedStatement ps1 = c.prepareStatement(sql1);
      ps1.setInt(1,idA);

      ResultSet rs = ps1.executeQuery();
      OutputStream os = null;
      int lobsize = 0;

      // Blob support.
      oracle.sql.BLOB b = null;
      while (rs.next()){
        b = (oracle.sql.BLOB) rs.getBlob(1);
      }// while end

      os = b.getBinaryOutputStream();
      lobsize = b.getBufferSize();	

      // Updates lob.
      ByteArrayInputStream is = new ByteArrayInputStream( file.getData() );
      byte[] buffer = new byte[lobsize];
      int bytesRead = 0;

      while( ( bytesRead = is.read( buffer ) ) != -1 ) os.write( buffer, 0, bytesRead );
      os.close();
      is.close();
      c.commit();
    }catch (SQLException e){
      //throw new UploadException(e);
      System.out.println( e.getMessage() );
      e.printStackTrace();
    }catch (IOException ie){
      //throw new UploadException(ie);
      ie.printStackTrace();
    }finally{
      ConnectionManager.closeConnection( c );
    }	
  }// insert end

}