Dúvida com INSERT com campo BLOB

3 respostas
S

Boa noite,

Tenho uma dúvida, eu preciso fazer uma conversão de um banco interbase, para sqlite. Então fiz uma aplicaçãozinha com java para tal, esta tudo pronto, funcionando, o banco sqlite pronto para receber os dados.

A dinamica da coisa

conecto no interbase > select * from tabela tal… > conecto no sqlite > insert into tabela tal… fim.

Porém eu tenho uma dúvida, em uma das tabelas tenho um campo blob que se refere a um texto formatado (rtf), como posso manipular isso? Eu pensei nisso, mas não estou conseguindo :

public ArrayList<Alternativas> buscarTodos() {   //conecta no firebird e faz o select de toda tabela,
      conectar(ConFactory.Firebird);                     // joga num ArrayList de uma classe pojo(não sei se o termo certo é esse mas enfim...)
      ArrayList<Alternativas> resultados = new ArrayList<Alternativas>();  
      ResultSet rs; 
      Blob blob;
      
      try {  
         rs = comando.executeQuery("SELECT * FROM POL013");  
         while (rs.next()) {  
            Alternativas temp = new Alternativas();  
            temp.setCd_instit(rs.getInt("CD_INSTIT"));
            temp.setNo_anoref(rs.getInt("NO_ANOREF"));
            temp.setNo_sequen(rs.getInt("NO_SEQUEN"));
            temp.setCd_pergun(rs.getInt("CD_PERGUN"));
            temp.setNo_opcao(rs.getString("NO_OPCAO")); 
            temp.setDs_opcao(rs.getBlob("DS_OPCAO"));  // esse é o campo blob, estou tentei usar esse rs.getBlob, fui pela lógica...
 
//...demais outros campos sendo selecionados...
              resultados.add(temp); }
//fecho a conexão... 
              return resultados;  

e logo após eu Insiro no banco SQlite assim :


public void insere(){  
        
      
      ArrayList<Alternativas> alt = buscarTodos();
      conectar(ConFactory.Sqlite);       
      try {  
        
        for(int i=0;i < alt.size();i++){
         System.out.print("INSERT INTO POL013 VALUES("+alt.get(i).getCd_instit()
                 +","+ alt.get(i).getNo_anoref()
                 +","+ alt.get(i).getNo_sequen()
                 +","+ alt.get(i).getCd_pergun()
                 +",\""+ alt.get(i).getNo_opcao()
                 +"\","+ alt.get(i).getDs_opcao() // este é o blob;

// ... demais outros campos sendo inseridos, não coloco todos pra não ficar tão grande aqui.

Então, estou fazendo desta maneira, todos os outros tipos, obviamente consigo inserir. Só falta esta tabela para que eu consiga concluir o trabalho. Mas não sei como manusear o blob assim.

Desde já obrigado, abraços

3 Respostas

R

http://javafree.uol.com.br/artigo/851262/Manipulando-campos-BLOB-e-CLOB-com-JDBC.html

S

Bom dia,

Então kra, eu tinha lido esse artigo, li alguns outros mas não ficou muito claro para mim, por isso postei a dúvida qui.

Em todos que eu li, os códigos se referenciavam para bancos oracle, tirando alguns metodos que eu percebi que são exclusivos do driver oracle, o resto posso fazer igual para o meu banco né?

E ultima dúvida, pelo que eu entendi eu preciso primeiramente inserir um blob vazio no banco , e depois sim inserir o blob “com dados” ???

Desculpem as perguntas, eu ainda to aprendendo tudo isso…

vlw abraços…

R

pode usar qualquer banco… o campos blob são comum a quase todos

existem outros meios de se fazer isso mas no link que te passei, ele faz os insert no registro atual e o campo blob ele deixa vazio… depois faz um select nesse campo usando no final o FOR UPDATE.

Esse comando faz com que o campo fica ativo pra ser trabalhado. Ele então usa InputStream e OutputStream pra transformar o blob em binário e jogar no banco

Aqui tem outro link que o ViniGodoy explica de forma prática o procedimento:

Criado 6 de fevereiro de 2013
Ultima resposta 7 de fev. de 2013
Respostas 3
Participantes 2