ClassCastException:com.microsoft.sqlserver.jdbc.SQLServerBlob cannot be cast to oracle.sql.BLOB

2 respostas
V

OI Galera GUJ

Seguinte estou desenvolvendo um programa que lê uma tabela do banco de Dados MSSQLServer 2008 que contem dois campos um do tipo VARCHAR e um outro do tipo IMAGE, depois estou gravando- os no Oracle 11g em uma tabela com um VARCHAR2 e BLOB.

Já tentei fazer cast normal (Blob), cast específico (java.sql.Blob), mas o erro persiste. Segue o código alguma outra idéia:

Erro completo:

java.lang.ClassCastException: com.microsoft.sqlserver.jdbc.SQLServerBlob cannot be cast to oracle.sql.BLOB
at oracle.jdbc.driver.OraclePreparedStatement.setBlob(OraclePreparedStatement.java:6156)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setBlob(OraclePreparedStatementWrapper.java:125)
at br.com.edocsystem.BancoDestino.Gravacao.grava(Gravacao.java:52)

Segue o método

public void grava() throws Exception{
      
        Connection connection = getConexao();
         LeituraTabPDF tab_pdf = new  LeituraTabPDF();
         
         ResultSet id = tab_pdf.leiaID();
         ResultSet pdf = tab_pdf.leiaPDF();

         
         List<String> idB = new ArrayList<String>();
         List<java.sql.Blob> pdfB = new ArrayList<java.sql.Blob>();          

        for (int i = 1; id.next()&& pdf.next(); ++i)
        {
           idB.add(id.getString("id"));
           pdfB.add((java.sql.Blob)pdf.getBlob("pdf"));
        }

        Object[] testeb = idB.toArray();
        Object[] testea = pdfB.toArray();
        
         for(int i=0; i<idB.size();i++){
            String sql = "INSERT INTO ARQUIVOS(ID,ARQUIVO)VALUES(?,?)";
            PreparedStatement st = connection.prepareStatement(sql);
            st.setString(1, (String) testeb[i]);
            st.setBlob(2,((java.sql.Blob) testea[i]));
            
            
            st.executeQuery();   
         }
    }
}

2 Respostas

V

Já fiz testes trocando e alternando os .jars dos bancos, novamente sem sucesso

V

Galera esse é o único fórum no mundo com a solução.

Bem comecei a testar de diversas maneiras como resolver esse impasse até que cheguei na fórmula.

Segue se algum dia alguém precisar

import java.sql.*;
import br.com.edocsystem.BancoOrigem.*;
import java.util.List;
import java.util.ArrayList;
import java.sql.Blob;
import java.io.InputStream;

public class Gravacao {

    private Connection dbConnection;

    private Connection getConexao() throws Exception,ClassNotFoundException{
              Class.forName("oracle.jdbc.OracleDriver");
              return this.dbConnection = DriverManager.getConnection(String do banco);
    }

    public void grava() throws Exception{
      
        Connection connection = getConexao();
         LeituraTabPDF tab_pdf = new  LeituraTabPDF();
         
         ResultSet id = tab_pdf.leiaID();
         ResultSet pdf = tab_pdf.leiaPDF();


         for(int i=1; id.next() ;i++){
                  pdf.next();
            String sql = "INSERT INTO ARQUIVOS(ID,ARQUIVO)VALUES(?,?)";
            PreparedStatement st = connection.prepareStatement(sql);
            st.setString(1, id.getString("id"));
            st.setBlob(2, pdf.getBlob("arquivo").getBinaryStream());
            st.executeQuery();
            st.close();
            System.out.println(i);
       
             }
      }

}
Criado 1 de abril de 2011
Ultima resposta 5 de abr. de 2011
Respostas 2
Participantes 1