Problema com conversor de bases

galera é o seguinte… estpu realizando a conversão de uns dados para outra base e fiz um mini aplicativo que gera os inserts…
o problema éo seguinte…
tenho um banco com uns 12 mil registros
e outro com 17 mil registros

faço um select e faço um while no resultset ( estou utilizando jdbc puro)

e dentro do while existe um select no banco para verificacação de uns dados ( o cadastro de produtos esta separado em 2 tabelas )

o de 12 mil registros o geração chega em 71% e para… o jframe fica como se não estivesse executando nenhum processo ( fica livre )

o que será ?

segue o código da rotina

public void realizarConversao(String caminhoRA, String caminhoCLIPP) throws IOException
	{
	
	    textArea.setText("");
		/*JFileChooser fsave = new JFileChooser();
		fsave.setDialogTitle("Onde pretendes salvar o arquivo SQL ?");
		fsave.showSaveDialog(null);
		String arquivo = fsave.getSelectedFile().getAbsolutePath();
		PrintWriter saida = new PrintWriter(new FileOutputStream(new File(arquivo),false),false);*/
		//conexões
		Conexao conRA = new Conexao(caminhoRA);
		Conexao conRAaux = new Conexao(caminhoRA);
		//fim das conexões
		
		try {
			PreparedStatement stmt = conRA.getConexao().prepareStatement("select count(*) as total from MATERIAL");
			ResultSet rs11 = stmt.executeQuery();
			rs11.next();
			int valor = rs11.getInt("total");
			progressBar.setMaximum(valor);
			PreparedStatement stmtM = conRA.getConexao().prepareStatement("select * from MATERIAL");
			ResultSet rs = stmtM.executeQuery();
			
			
			
		    progressBar.setValue(0);
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		    Date data = new Date();
		    List<String> linhas = new ArrayList<String>();
			int a = 0;
			while(rs.next())
			{
				       a = a+1;
				       progressBar.setValue(progressBar.getValue()+1);
				       paintComponents(getGraphics());
                      // System.out.println("Codigo = "+rs.getString("CODIGO"));				
				       PreparedStatement stmtConsulta = conRAaux.getConexao().prepareStatement("select * from PRODUTO where CODIGO = '" +
				    		   rs.getString("CODIGO")
				    		   +"'");
				       textArea.setText("Gerando o SQL...");
				       textArea.append("-------------------------------------------------");
				       
				       ResultSet rsConsulta = stmtConsulta.executeQuery();
				       
						if(rsConsulta.next())
						{
							String sql_tb_estoque = 
								"INSERT INTO TB_ESTOQUE (ID_ESTOQUE, ID_GRUPO, DESCRICAO, STATUS," +
								" DT_CADAST, HR_CADAST, FRACIONADO, PRC_VENDA, PRC_CUSTO, ULT_VENDA" +
								", MARGEM_LB, POR_COMISSAO, ULT_FORNEC, GRADE_SERIE, ID_TIPOITEM," +
								" ID_CTI, OBSERVACAO, CST_PIS, CST_COFINS, PIS, COFINS, UNI_MEDIDA)" +
								" VALUES (" +rs.getString("CODIGO")
								+",null,'" +rs.getString("NOME")
								+"','A','" +sdf.format(data)
								+"','00:00:00'" +
								",'N'," +rsConsulta.getDouble("PVENDA")
								+",null,null,null,null,null,'N',0," +converteCTI(rsConsulta)
								+"," +
								"null,'99','99',0,0,'" +rs.getString("UNID")
								+"');";
								linhas.add(sql_tb_estoque);
							   //textArea.append(sql_tb_estoque+"\n");
							   //textArea.repaint();
							    //saida.print(sql_tb_estoque);
							    //saida.write(13);  
							    //saida.write(10); 
								//stmtClipp.addBatch(sql_tb_estoque);
								
								String sql_tb_est_lol = "INSERT INTO TB_EST_IDENTIFICADOR (ID_IDENTIFICADOR, ID_ESTOQUE, CHAVE) VALUES (" +
										"" +rs.getString("CODIGO")
										+"," +rs.getString("CODIGO")
										+",null);"; 
								linhas.add(sql_tb_est_lol);
                               // textArea.append(sql_tb_est_lol+"\n");
								//	stmtClipp.addBatch(sql_tb_est_lol);
                                //textArea.repaint();
                                
								String sql_tb_est_produto = 
									"INSERT INTO TB_EST_PRODUTO (ID_IDENTIFICADOR, DESC_CMPL, COD_BARRA," +
									" REFERENCIA, PRC_MEDIO, QTD_COMPRA, QTD_ATUAL, QTD_MINIM, QTD_INICIO," +
									" QTD_RESERV, QTD_POSVEN, ULT_COMPRA, PESO, IPI, CF, CST, IAT, IPPT," +
									" COD_NCM, ID_NIVEL1, ID_NIVEL2, MVA, CST_IPI, FOTO, CSOSN) VALUES (" +
									"" +rs.getString("CODIGO")
									+"," 
									+"null,'" +rs.getString("REFERENCIA")
									+"',null,null,null," +
									"10000,null,null,null,null,null,null," +
									"0,null," +converteCST(rsConsulta)
									+",'A','T',null,null,null,0,null,null," +converteCSOSN(rsConsulta.getString("TRIB"))
									+"" +
									");";
								linhas.add(sql_tb_est_produto);
*/								//textArea.append(sql_tb_est_produto+"\n"); 
								//stmtClipp.addBatch(sql_tb_est_produto);
								//textArea.repaint();
				            
					//	}
					
						
			    
			}
			JOptionPane.showMessageDialog(null, "Comandos Gerados com Exito.");
			/*
			for(String a: linhas)
			{
				textArea.append(a);
				paintComponents(getGraphics());
			}*/
			//stmtClipp.executeBatch();
		}
		catch (Exception e)
		{
			JOptionPane.showMessageDialog(null, "Erro no Conversor: "+e.getMessage());
			//progressBar.setIndeterminate(false);
		}
	}
	

me ajudem galera, preciso resolver isso urgente

Olá,

Seguinte altere o seu catch de assim :

catch (Exception e)  
        {  
            JOptionPane.showMessageDialog(null, "Erro no Conversor: "+e.getMessage());  
            //progressBar.setIndeterminate(false);  
        }  

Para assim :

catch (Exception e)  
        {  
            e.printStrace();
            JOptionPane.showMessageDialog(null, "Erro no Conversor: "+e.getMessage());  
            //progressBar.setIndeterminate(false);  
        }  

Acho que esta rolando um erro visto que sempre para na linha 71 e o option pane com a mensagem de erro nao esta aparecendo por causa do progress bar que esta ativo. (apenas uma sugestao). Coloque o printStrace e poste o erro ae.

Att,

deu esse erro aqui amigo


Bleza,

Voce esta estourando a memoria de alguma forma, vamos tentar descobrir como vc esta fazendo isso.
POsta ai a sua linha 121 da classe TelaPrincipal

Abs !

na linha 121 esta o try{ … kkk engraçado…

e como vi tambem deu na linha 240 e nela tem

[code]String sql_tb_est_produto =
“INSERT INTO TB_EST_PRODUTO (ID_IDENTIFICADOR, DESC_CMPL, COD_BARRA,” +
" REFERENCIA, PRC_MEDIO, QTD_COMPRA, QTD_ATUAL, QTD_MINIM, QTD_INICIO," +
" QTD_RESERV, QTD_POSVEN, ULT_COMPRA, PESO, IPI, CF, CST, IAT, IPPT," +
" COD_NCM, ID_NIVEL1, ID_NIVEL2, MVA, CST_IPI, FOTO, CSOSN) VALUES (" +
“” +rs.getString(“CODIGO”)
+"," //<- AQUI E A LINHA 240
+“null,’” +rs.getString(“REFERENCIA”)
+"’,null,null,null," +
“10000,null,null,null,null,null,null,” +
“0,null,” +converteCST(rsConsulta)
+",‘A’,‘T’,null,null,null,0,null,null," +converteCSOSN(rsConsulta.getString(“TRIB”))
+"" +
“);”;

[/code]

complicado, um banco com aproximadamente 9 mil registro ele foi tranquilo, mas os 2 bancos de 12 mil e 17 mil registros ele da isso

Não é possivel isso acontecer, provavelmente seu código esta desatualizado, limpe seus arquivos compilados, compile novamente, crie outro jar e execute-o.
Posta ae o resultado.

to executando nesse momento aqui…
Dei o clean no projeto e gerei o jar novamente
Agr e esperar uns instantes para ver se vai

Deu erro agora em linhas diferentes veja no anexo

nas linhas tem

[code]

		public void actionPerformed(ActionEvent arg0) {
			/** REALIZANDO CONVERSÃO DOS DADOS */
			
		
			
			
					try {
						realizarConversao(txtRasge.getText(),"");   // <- linha 122
						progressBar.setIndeterminate(false);
						JOptionPane.showMessageDialog(null, "Dados convertidos com sucesso!");
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			
		
	});[/code]

ResultSet rsConsulta = stmtConsulta.executeQuery(); /// linha 201

Ta tenso o negocio, acho que ele nao esta aguentando milhares de select um atras do outro


Olá,

Poste a sua classe conexao ae

Abs !



/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.mmv.technology.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


/**
 *
 * @author notebook
 */
public class Conexao {
    
    private Connection conexao;
    private ResultSet rs;
    private Statement stmt;
   

    public Conexao(String caminhoBanco) {
          

   	   try {
              
   	        Class.forName("org.firebirdsql.jdbc.FBDriver");
   	            
   	        conexao = DriverManager.getConnection("jdbc:firebirdsql:127.0.0.1/3050:"+caminhoBanco+"?cl_ctype=ISO-8859-1","SYSDBA","masterkey");
   	        
   	        } catch (Exception e) {
   	        	e.printStackTrace();
   	        }
       
    }
    
  
    
    
    public void desconectar()
    {
        try {
            getConexao().close();
        } catch (Exception e) {
        }
    }
    
    
    public void executeSQL(String sql, boolean update)
    {
        try {
            
            if(update)
            {
                stmt = getConexao().createStatement();
                int row = stmt.executeUpdate(sql);
                System.out.println(row+" linhas afetadas.");
            }
            else
            {
                stmt = getConexao().createStatement();
                rs = stmt.executeQuery(sql);
            }
            
        } catch (Exception e) {
        }
    }

    /**
     * @return the conexao
     */
    public Connection getConexao() {
        return conexao;
    }

    /**
     * @return the rs
     */
    public ResultSet getRs() {
        return rs;
    }




    
    
    
}

Pois eh cara,

O ideal é revisar sua arquitetura e certificar se realmente vc precisa executar todas essas query’s.
Mas caso tenha urgencia, você pode aumentar o tamanho do sua “heap space” como indicado no post abaixo:

Abraço

Ouro detalhe,

NUNCA coloque algo assim no seu código :

} catch (Exception e) {  
    //Nao faco nada aqui dentro
}  

Pois se acontecer uma exceção você nunca vai saber.
Sempre coloque algo dentro de um bloco catch mesmo que seja um log de aviso para vc ficar sabendo o que esta acontecendo.

Abraçoo !

value pelas dicar brother, era somento uma rotina para converter os produtos de 3 bancos de um sistema antigo para o novo… e o aumento de memoria da JVM consegui executar.
abraços

amigo deu um erro no final do banco maior

GDS EXCEPTION. 335544430. unable to allocate memory from operating system

sabe o que pode ser ?

pareçe que faltou memoria para o sistema operacional kkkk
vou fechar tudo para executar a conversão do banco maior faltou apenas 4%