Arquivo do Banco de Dados

18 respostas
R

Como faço para puxar um arquivo que esta no banco de dados?

18 Respostas

N

Como assim arquivo ???
Vc não quis dizer registro ???

R

“Neo”:
Como assim arquivo ???
Vc não quis dizer registro ???

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?

caiofilipini

Você gravou esse arquivo em um campo BLOB?

R

Yep! vc sabe como puxar ele ?

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

R

“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

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?

om1

“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?

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.

caiofilipini

Exatamente. :wink:

brlima

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…

R

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);
    } 
}
danieldestro

Qual o erro?

R

erro sql:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.

om1

você precisa de um

rs.next();

antes de

java.io.InputStream in = rs.getBinaryStream(3);
danieldestro

Usando ODBC???
Parece que o tipo de ResultSet não permite esse comando.

om1

Não entendo o que vc quer dizer com “Usando ODBC”.

danieldestro

Driver JDBC ODBC… foi só um questionamento.

om1

Ah, bom.

Já tava pensando que eu tinha falado alguma bobagem :slight_smile:

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”.

R

[quote=“om”]você precisa de um

rs.next();

antes de

java.io.InputStream in = rs.getBinaryStream(3);

Valew!

Criado 18 de dezembro de 2003
Ultima resposta 18 de dez. de 2003
Respostas 18
Participantes 6