Converter InputStream para Blob

2 respostas
C

Galera to com um problema que é o seguinte:
Eu reciso fazer o download de um arquivo, e grava-lo no BD, DB2, num campo blob.
Eu consigo fazer o download, através de uma conexao de url, e consigo pegar o conteudo com o método con.getInputStrem() (algo do genero, me perdoem mas nao estou com o codigo aqui)

e quando vou salvar no banco, quando vou fazer o bind, coloco

pstmt.setBinaryStream(1,conn.getInputStream(), conn.getInputStream().available());

e beleza, ele salva bonitinho, mas quando faćo o download, o arquivo vem com 0 bytes.
(o método de download funciona, pois quando o arquivo eh upado por outro caminho, ele faz o download perfeitamente)

gostaria de saber se tem como eu converter um InputStream para Blob, para eu usar o metodo específico (pstmts.etBlob()) para inserir o arquivo.

já tentei de algumas maineiras, convertendo o Input Stream para bytes, mas não consegui
me perdoem se não fui claro, mas não estou com o código aqui neste momento, mas basicamente, preciso pegar um inputStream, salvar no banco como blob.

Muito Obrigado!

2 Respostas

J

Salve Pessoal!!

Você conseguiu resolver esse problema, se sim, poderia postar?

Obrigado…

C

Kra, eu resolvi, e já descontinuei o programa... hueahaeuae

Eu fiz o seguinte, eu salvei um dado no banco, com o blob = NULL, ou igual a qualquer porcaria, depois, fiz isso, com o novo id gerado:

sql = "SELECT CONTENT FROM BD.EVIDENCE WHERE ID_EVIDENCE = ?";

				PreparedStatement pstmSel = con.prepareStatement(sql);
				pstmSel.setLong(1, lastId);

				resultSet = pstmSel.executeQuery();

				Blob blob = null;

				if (resultSet.next()) {
					blob = resultSet.getBlob("CONTENT");
				} else {
					System.out.println("Empty ResultSet!!!");
				}

				byte[] b = new byte[content.available()];
				content.read(b);
				blob.setBytes(1, b);

				sql = "UPDATE BD.EVIDENCE SET CONTENT = ? WHERE ID_EVIDENCE = ?";

				PreparedStatement pstmUpdate = con.prepareStatement(sql);
				pstmUpdate.setBlob(1, blob);
				pstmUpdate.setLong(2, lastId);
				rs = pstmUpdate.executeUpdate();

				String sqlLog = "INSERT INTO BD.LOG_EVIDENCE (ID,MESSAGE,USER_ID,TIME_ACTION) VALUES(?,?,?,CURRENT TIMESTAMP)";

				PreparedStatement pStmLog = con.prepareStatement(sqlLog);
				pStmLog.setLong(1, lastId);
				pStmLog.setString(2, "The e-mail Evidence was inserted");
				pStmLog.setInt(3, Integer.parseInt(request
						.getParameter("idUser")));

				pStmLog.executeUpdate();

Um workaround cabuloso, mas funcionou.

Criado 2 de setembro de 2010
Ultima resposta 11 de abr. de 2011
Respostas 2
Participantes 2