Como faço para puxar um arquivo que esta no banco de dados?
Como assim arquivo ???
Vc não quis dizer registro ???
[quote=“Neo”]Como assim arquivo ???
Vc não quis dizer registro ???[/quote]
Não, eu gravei um arquivo no banco de dados com o PreparedStatement, blz!! ta dentro do banco de dados, agora eu quero puxar ele de volta para um determinado local, como eu faco?
Você gravou esse arquivo em um campo BLOB?
Yep! vc sabe como puxar ele ?
Você precisa usar o método getBinaryStream() da classe ResultSet. Dê uma olhada nesse tópico, deve te ajudar:
http://www.guj.com.br/forum/viewtopic.php?t=7350&highlight=getbinarystream
[]'s
[quote=“caiofilipini”]Você precisa usar o método getBinaryStream() da classe ResultSet. Dê uma olhada nesse tópico, deve te ajudar:
http://www.guj.com.br/forum/viewtopic.php?t=7350&highlight=getbinarystream
[]'s[/quote]
Blz!!, mas no caso eu quero pegar apenas um arquivo e no banco tem mtos! 327, tenho q fazer uma consulta…eu estava tentando fazer de uma outra maneira utilizando o PreparedStatement, para pegar o arquivo q eu quero eu teria de fazer um consulta? certo?
[quote=“rmirandola”]
Blz!!, mas no caso eu quero pegar apenas um arquivo e no banco tem mtos! 327, tenho q fazer uma consulta…eu estava tentando fazer de uma outra maneira utilizando o PreparedStatement, para pegar o arquivo q eu quero eu teria de fazer um consulta? certo?[/quote]
Sim. Da mesma forma que vc pega qualquer outro campo de um registro. Por exemplo, se sua tabela tem um campo “nome”, pra vc pegar um, e apenas um nome, você terá que fazer uma consulta sql para restringir seu resultado a apenas um nome.
Exatamente.
Cara, uma coluna BLOB que vc tá tentando pegar o arquivo nada mais é do que uma coluna de tabela comum. Acho que vc tem que fazer um select colocando as clausulas e colunas chaves para pegar somente o registro que vc quer, e dai pegar a coluna do arquivo.
Por exemplo: eu tenho um cadastro de item onde uma das colunas é a imagem do item. Sempre passo “select imagem from cad_item where codigo = A”. Ai utilizo o método para pegar o conteudo da coluna.
Acho que é por ai…
Olha o method q eu criei, ta dando pau, será que alguem sabe ??
PS: o DataConnection é um componente q eu criei para a conexao!
public void obterArqruivo() throws IOException{
try{
try{
try{
DataConnection dc = new DataConnection("CORRETORA_CIS");
Connection conn = dc.getConnection();
PreparedStatement ps = conn.prepareStatement("Select TB_ARQU_COMT.CO_ARQU_COMT ,"+
" TB_ARQU_COMT.NO_ARQU_COMT, "+
" TB_ARQU_COMT.TX_ARQU_COMT "+
"From TB_ARQU_COMT " +
"Where TB_ARQU_COMT.CO_ARQU_COMT = 327");
ResultSet rs = ps.executeQuery();
java.io.InputStream in = rs.getBinaryStream(3);
File f = new File("D:/teste/rmb.txt");
FileOutputStream fos = new FileOutputStream(f);
byte[] buffer = new byte[1024];
while ((in.read(buffer, 0, buffer.length)) != -1) {
fos.write(buffer);
}
fos.flush();
fos.close();
in.close();
System.out.println("copiou o arquivo do banco!");
}catch (FileNotFoundException fout){
System.out.println("erro file : " + fout);
}
}catch(SQLException sqlex){
System.out.println("erro sql:" + sqlex);
}
}catch (SantanderException se){
System.out.println("erro : " + se);
}
}
Qual o erro?
erro sql:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.
você precisa de um
rs.next();
antes de
java.io.InputStream in = rs.getBinaryStream(3);
Usando ODBC???
Parece que o tipo de ResultSet não permite esse comando.
Não entendo o que vc quer dizer com “Usando ODBC”.
Driver JDBC ODBC… foi só um questionamento.
Ah, bom.
Já tava pensando que eu tinha falado alguma bobagem
Acho que o cursor só se posiciona no primeiro registro do resultset quando vc dá o primeiro .next() . Até então, ele fica no “BOF”.
[quote=“om”]você precisa de um
rs.next();
antes de
java.io.InputStream in = rs.getBinaryStream(3);
Valew!