Recuperar Imagem de dentro do Banco MySQL

2 respostas
adriano_kahn

Oi pessoal... O código abaixo eu uso para armazenar imagens e dados no BD MYSQL. Mas o que necessito é em caso de eu digitar por exemplo o código que correspondesse a um registro cadastrado o sistema me mostrasse a imagem, nome e cidade no jLabel da imagem. Meu problema tá sendo recuperar a imagem... Como faço?

private void btGravarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        java.sql.Connection conn;

        try
        {
            Class.forName("org.gjt.mm.mysql.Driver");

            //Link para a tabela do banco de dados
            conn = java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/riapi", "root","123");
        }
        catch (Exception e)
        {
            e.printStackTrace();
            throw new java.lang.RuntimeException("Erro ao conectar");
        }

        //Inserindo dados digitados no JTextField para que seja usado no comando SQL
        String nome = this.jTNome.getText();
        String cidade = this.jTCidade.getText();

        //Criando instrução de inserção no sql
        String comando = "insert into meliante (nome, cidade, imagem) VALUES(?, ?, ?)";

        try
        {
            java.sql.PreparedStatement stmt = conn.prepareStatement(comando);
            stmt.setString(1, nome);
            stmt.setString(2, cidade);

            ByteArrayOutputStream bytesImg = new ByteArrayOutputStream();
            ImageIO.write((BufferedImage)bi, "jpg", bytesImg);
            bytesImg.flush();
            byte[] byteArray = bytesImg.toByteArray();
            bytesImg.close();
            // agora é só jogar no banco de dados...
            stmt.setBytes(3, byteArray);

            stmt.executeUpdate();
            stmt.close();
            conn.close();
        }
        catch(IOException ex)
        {
            ex.printStackTrace();
        }
        catch(SQLException sqlex)
        {
            sqlex.printStackTrace();
        }


        //Fechando a Conexão
        try
        {
            conn.close();
        }

        catch (Exception e)
        {
            throw new java.lang.RuntimeException("Erro Fechar");
        }

        JOptionPane.showMessageDialog(null, "Registro gravado com sucesso");
        jTNome.setText("");
        jTCidade.setText("");
    }

O código acima é apenas o de inserção

Obs: O código é armazenado dentro do MySql como autoincremento, então queria criar um JTextField para digitar o código e um botão Pesquisar para que mostre os dados referentes ao registro do código digitado...

Obrigado e bons estudos a todos

2 Respostas

leorbarbosa

Adriano,

se foi o que entendi, para recuperar a imagem, use o método para binary large object:

Blob blob = rs.getBlob("imagem");

att,

brunorota

Tenho esse método que eu usava pra recuperar imagem

public BufferedImage capturaImagem(int codComponente, int codEclusa) throws IOException{
		
		File image = null;
		Blob blob = null;
		InputStream bin = null;
		FileOutputStream bout = null;
		BufferedImage bi = null;
		
		byte[] bbuf = new byte[1024];
		int bytesRead = 0;
		
		String sql = "SELECT imagem FROM imagemComponente WHERE codComponente = "+ codComponente +" AND codEclusa = "+ codEclusa ;
		
		try{
			Connection conn = ConnectionDB.getConnection();
			Statement stm = conn.createStatement();
			ResultSet rset = stm.executeQuery(sql);
			
			while(rset.next()){
				
				blob = rset.getBlob("imagem");  
				bin = blob.getBinaryStream();  
				//bout = new FileOutputStream("teste.jpg");  
				
				/*while ((bytesRead = bin.read(bbuf)) != -1) {  
				     bout.write(bbuf, 0, bytesRead);  
				} */
				
				//image = new File("teste.jpg");
				
				bi = ImageIO.read(bin);
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return bi;
	}

Dá uma visualizada e faz a adaptação

Criado 10 de maio de 2011
Ultima resposta 12 de mai. de 2011
Respostas 2
Participantes 3