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
marcia
#2
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);
}
}
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
Marcia,
Acho que funcionou. Não estava dando o cast (int) no metodo.
Pernada minha aqui.
Att
vcscastro
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