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
}