Atualizar um BLOB

Galera,
Estou tomando uma surra em atualizar um blob no meu sistema.
Abaixo o código que estou usando

 public void atualizarFoto() throws Exception {

        FileInputStream fis = new FileInputStream(diretorioFoto);
        byte[] tmp = new byte[1024];
        byte[] data = null;
        int sz, len = 0;

        while ((sz = fis.read(tmp)) != -1) {
          if (data == null) {
            len = sz;
            data = tmp;
          } else {
            byte[] narr;
            int nlen;

            nlen = len + sz;
            narr = new byte[nlen];
            System.arraycopy(data, 0, narr, 0, len);
            System.arraycopy(tmp, 0, narr, len, sz);
            data = narr;
            len = nlen;
          }
        }
        if (len != data.length) {
          byte[] narr = new byte[len];

          System.arraycopy(data, 0, narr, 0, len);
          data = narr;
        }
        String sqlAtualizarFoto = "update IDENTIFICACOES set FOTOICAO = ? where CODIDENTIFICACAO = ".concat(codAcessante);
        
        pstmt =  buscarConexao().prepareStatement(sqlAtualizarFoto);
        pstmt.setObject(1, data);
        pstmt.executeUpdate();
        fis.close();
        diretorioFoto.delete();
        pstmt.close();


    }

Como que eu faço para esse treco atualizar a minha foto?

Att

vcscastro

Acho que assim é bem mais simples:


    public void inserirImagem(Connection conn, String  codigoInterno, String nomeImagem, InputStream imagem, int tamanhoImagem) throws SQLException{
    	PreparedStatement statement = null;
    	try{
    		statement = conn.prepareStatement("INSERT INTO IMAGEMPRODUTO (CODIGOINTERNO,NOMEIMAGEM,IMAGEM) VALUES (?,?,?)");
    		statement.setString(1,codigoInterno);
    		statement.setString(2, nomeImagem);
    		statement.setBinaryStream(3, imagem, tamanhoImagem);
    		statement.executeUpdate();    
    	} catch (SQLException exception) {
    		throw exception;
    	} finally {
    		closeAll(null, statement, null);
    	}
    }
    
    public void atualizarImagem(Connection conn, String  codigoInterno, String nomeImagem, InputStream imagem, int tamanhoImagem) throws SQLException{
    	PreparedStatement statement = null;
    	try{
    	    statement = conn.prepareStatement("UPDATE IMAGEMPRODUTO SET NOMEIMAGEM=?, IMAGEM=? WHERE CODIGOINTERNO = ? ");
    	    statement.setString(1, nomeImagem);
    	    statement.setBinaryStream(2, imagem, tamanhoImagem);                    
    	    statement.setString(3,codigoInterno);
    	    statement.executeUpdate();            		
    	} catch (SQLException exception) {
    		throw exception;
    	} finally {
    		closeAll(null, statement, null);
    	}
    }

:wink:

Marcia,

Tentei do jeito que você sugeriu, so que estou usando sqlserver e o driver do sqlserver não aceita o comando

 statement.setBinaryStream(2, imagem, tamanhoImagem);      

obrigado pela dica

vcscastro

:frowning:

Marcia,

Acho que funcionou. Não estava dando o cast (int) no metodo.

Pernada minha aqui.

Att

vcscastro

Que bom

hehehe

[]s

Galera,
A merda do driver do sqlserver da o seguinte erro quando rodo a minha aplicação

Exception in thread "AWT-EventQueue-1" java.lang.AbstractMethodError: net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V

Já troquei o infeliz do driver.

Att

Vinicius