Problema com listagem de imagem salva como blob no banco

Estou com problema para recuperar a imagem no banco, estou trabalhando com JSP e servlet, consigo recuperar, no entanto para todos os registro está sendo exibida a imagem gravada no primeiro registro.

A seguir o servlet que estou usando:

[code]protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

       FabricaConexao fabrica = new FabricaConexao();
       Connection conexao = fabrica.fazConexao(); 
       
       JDBCUploadDAO dao = new JDBCUploadDAO(conexao);

       String comando = "select dataarquivo from foto";  
    try {
        PreparedStatement st = conexao.prepareStatement(comando);
        InputStream leitura;  
        ByteArrayOutputStream buffer = new ByteArrayOutputStream(1024);  
        ResultSet rs = st.executeQuery();
        
        if (rs.next()){  
          leitura = rs.getBinaryStream(1);  
          int lido = 0;  
          lido = leitura.read();  
          while (lido != -1) {  
              buffer.write(lido);  
              lido = leitura.read();  
          }  
      }
        
       // converte buffer em array de bytes e envia para cliente  
      response.getOutputStream().write(buffer.toByteArray());  
      response.setContentType("image");
      // encerrar recursos  
      rs.close();  
      st.close();  
      fabrica.fecharConexao();
     } catch (SQLException ex) {
        Logger.getLogger(Dowload.class.getName()).log(Level.SEVERE, null, ex);
     }   
}

[/code]

Se alguém puder me ajudar.

Boa tarde

Uma observação, posso estar enganado mas nesta parte onde vc testa com “if (rs.next())”, não ficaria melhor “while (rs.next())” ?

Att.

Obrigado pela dica, mas continuou com o mesmo erro.

quando fiz isso eu salvo o atalho para o lugar da imagem no servidor, uso uma string coisa assim, e através disso eu pego a mesma. não uso o blob.

pode ser uma lógica diferente, mas sei que funciona e é usada.

Eu sei que é mais usado salvar o caminho do diretório no banco, mas é que é um requisito do sistema salvar desse modo usando blob. Então tive que fazer dessa forma.

Mas, obrigado.

[quote=desenvolvedorIniciante]Eu sei que é mais usado salvar o caminho do diretório no banco, mas é que é um requisito do sistema salvar desse modo usando blob. Então tive que fazer dessa forma.

Mas, obrigado.[/quote]
certo.

ah se quiser conhecer alguns jogos e aplicativos meus, existem alguns, neste link abaixo:
http://www.4shared.com/zip/QDKCwuuj/ultimos.html

Antes que eu faça uma injustiça, o código que você postou foi condensado de alguma forma, alguma variável ou método foi omitido ?

Pergunto isso porque notei alguns problemas de estrutura.

Ao meu entender, o processamento do método “doGet”, é executado uma vez a cada requisição.

Tendo isso como base gostaria de esclarecer algumas dúvidas:

Ao fazer essa requisição, você quer recuperar todas as imagem guardadas no banco ?

Se sim, então a instrução SQL -> “select dataarquivo from foto”, está correta, pois é oque ela vai fazer (considere que são imagens e isso pode vir a demorar um bocado com o tempo)
Se não, você deve implementar algum tipo de filtro como “select dataarquivo from foto where (condicao)”, acredito que esse parametro deva vir junto com o request, que em nenhum momento foi utilizado.

da forma como esta independente da requisição o retorno sera a primeira imagem pois e a primeira a ser lida do banco