Outra maneira de gravar e recuperar imagens no MySQL

Ola galera
Existe outra maneira de gravar imagem no banco MySQL?

Eu conheço esse e funciona direitinho

[code]public void addImagemComponente(int cod, File image, FileInputStream fis){

	String sql = "INSERT INTO imagemComponente VALUES(?,?)";
	
	try{
		Connection conn = ConnectionDB.getConnection();
		PreparedStatement pstm = (PreparedStatement) conn.prepareStatement(sql);
	
		pstm.setInt(1, cod);
		pstm.setBinaryStream(2, fis, (int) image.length());
		
		pstm.execute();
	}catch(Exception e){
		e.printStackTrace();
	}
}[/code]

O problema desse jeito é q pra eu gravar a imagem “diminuida” no banco eu preciso gravar essa copia da imagem no disco rígido e depois pegar o endereço dessa nova imagem e criar um objeto File

E para recuperar tem a mesma historia precisa gravar no HD e depois recuperar a imagem

conheço essa maneira

[code]public BufferedImage capturaImagem(int cod) throws IOException{

	File image = null;
	Blob blob = null;
	InputStream bin = null;
	FileOutputStream bout = null;
	byte[] bbuf = new byte[1024];
	int bytesRead = 0;
	
	String sql = "SELECT imagem FROM imagemComponente WHERE codComponente = "+ cod;
	
	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);  
			} 
		}
		
	}catch(Exception e){
		e.printStackTrace();
	}
	
	image = new File("teste.jpg");
	
	BufferedImage bi = ImageIO.read(image);
	
	return bi;
	
}[/code]

Como da pra ver no código acima eu retiro a imagem do banco e gravo no HD e soh depois eu crio um BufferedImage com a imagem retirada do banco, existe uma maneira de eu ter um BufferedImage da imagem retirada do banco mas sem gravar esse imagem na HD?

Atenciosamente

Declare seu método para receber uma InputStream (não FileInputStream).
Passe um ByteArrayInputStream para seu método.
Um ByteArrayInputStream pode ser construído a partir de um byte[].

Pq vc não está usando o ImageIO.read, como te recomendei no outro tópico?

Ola viny
Agora eu achei o material

O ImageIO.read() aceita um InputStream por parametro, sendo assim creio eu q eu nao vou precisar gravar a imagem e depois ler ela por um File

EU nao estou com o meu note, mais assim q chegar em casa vou testar

Obrigado ^^

ola vini consegui retirar as imagens do banco sem precisar gravar no HD com o ImageIO.read() passando um InputStream por parametro

Tem como eu “converter” uma BufferedImage para um InputStream? sem gravar a imagem no HD?

Obrigado

ImageIO.write?

Eu fiz isso vini pra converter um BufferedImage em um InputStream

[code]
//imagem é um BufferedImage
byte[] raster = ((DataBufferByte)imagem.getRaster().getDataBuffer()).getData();

		 ByteArrayInputStream b = new ByteArrayInputStream(raster);
		 InputStream i = b;[/code]

Ele converte soh q ae pra adiciona no banco eu fiz assim

//imagem é um InputStream setBinaryStream(1, imagem);

o dado é adicionado no banco soh q nao é uma imagem

Oq eu passo pra tranformar ele em uma imagem?

Com o ImageIO.write eu consigo gravar os dados no banco vini?

Eh q eu pesquisei e tudo, e nao achei outra maneira pra eu gravar uma imagem no banco

Eu soh achei pra passar um InputStream e um File para o setBinaryStream();

O InputStream eu consegui com o exemplo ae de cima

Tem um jeito de gravar a imagem no banco sem ser a partir de um objeto File?