Migração

Buenas.

Gurizada, é o seguinte… Tô migrando um sistema do delphi para o java (JSF), e tenho um campo do tipo blob, no banco oracle, o qual devo migrar para o postgres (bytea).

Meu código está assim:

[code]public static void main(String args[]){
try{
InsereDadosOra id = new InsereDadosOra();
ResultSet rs = id.retornaTabela();
Connection conexao = getConexao();
int intConta = 0;
while(rs.next()){
intConta++;

	        PreparedStatement declaracao = null;  
	        String sql = "insert into fso_figuras_fso (capitulo, identifica, figura, descricao, imagem, numfig, dpis) values " + 
	        										"(?, ?, ?, ?, ?, ?, ?)";
	        try {  
				String strCdCapitulo = rs.getString("capitulo");
				String strNrFSO		 = rs.getString("identifica");
				int intCdFigura		 = rs.getInt("figura");
				String strDsFigura	 = rs.getString("descricao");
				byte[] byteImagem	 = rs.getBytes("imagem");
				String strNrFigura	 = rs.getString("numfig");
				int intNrDpi		 = rs.getInt("dpis");
				
				System.out.println("Mostrando - <" + intConta + "> ----> " + strCdCapitulo);
	
	            declaracao = conexao.prepareStatement(sql);  
	            declaracao.setString(1, strCdCapitulo);
	            declaracao.setString(2, strNrFSO);
	            declaracao.setInt(3, intCdFigura);
	            declaracao.setString(4, strDsFigura);
	            declaracao.setBytes(5, byteImagem);
	            declaracao.setString(6, strNrFigura);
	            declaracao.setInt(7, intNrDpi);
	            declaracao.executeUpdate();
	
	        } catch (Exception ex) {  
	            System.out.println("Erro ---- >>> " + ex);
	        }
    	}
	}catch(Exception e){
		System.out.println("Erro -> " + e);
	}
}[/code]

Bom, ele migra beleza… sem galho, só que os dados ficam em um formato assim:

Daí eu tento gerar imagens com um servlet, tipo esse:

(...)
InputStream in = rs.getBinaryStream("imagem");
            
            OutputStream out = response.getOutputStream();
            int b;
            while ((b = in.read()) != -1) {
                out.write(b);
                intCt++;
            }
            
            in.close();
            out.flush();
            out.close(); 
(...)

Quando eu cadastro uma imagem a partir do meu sistema, consigo exibir, mas os dados legados, não exibe…

Alguma sugestão?! (talvez eu esteja migrando em formato errado, não sei)

Se alguém já teve alguma experiência neste sentido, e puder me ajudar…

brigadão aí galera.

Valeu!

O problema pode ser da codificação dos símbolos,

como você fez a passagem dos dados do Oracle para o PostgreSQL?

Se puder faz um teste com esse programa feito em java e que é muito bom para isso:
http://sourceforge.net/projects/opendbcopy/

Depois tente ler novamente as imagens legadas (migradas com o opendbcopy).

Os dois bancos estão no mesmo SI? Linux ou Windows?

A aplicação Delphi acessava o banco pelo ADO ou por componentes como ZeosLib?

Quais as versões dos bancos, qual o enconding do postgresql?

Da umas pistas ai, talvez possamos ajudar.

fw

opa… então…

a passagem dos dados fiz através daquela classe que tem o código logo acima…

Os dois bancos estão em windows…

No delphi, o acesso é via ADO…

O oracle está na versão 8, enquanto o postgres na 8.1…

Enquanto isso, vou testar o openDB…

Tomara que funcione… hehehe

valeu, por enquanto… dps volto pra dizer o que aconteceu.

valeu!

Mais uma coisa,

veja os enconding do Oracle e do PostgreSQL.

Qual a url do Oracle que você está utilizando, eu normalmente faço:

jdbc:oracle:thin:@//server

mas talvez, você devesse usar a ponte jdbc-odbc para ler os dados, e assim usar a mesma camada que foi utilizada para gravar os dados no Oracle… (é um chute, mas quem sabe).

fw