Ajuda com metodos [RESOLVIDO]

12 respostas
brunosardao

Pessoal,

Eu tenho dois metodos , uma de processamento e outro de inserção de dados no banco de dados.

public void processamento(){

 try{

File [] arquivos;
File dir = new File("C:/LOG/HG");
arquivos = dir.listFiles();
   
   for (int i = 0; i < arquivos.length; i++){
              System.out.println("Lendo o arquivo:" + arquivos[i].getName());
	
              FileInputStream fis      = new FileInputStream(arquivos[i]);
              InputStreamReader stream = new InputStreamReader(fis);
              BufferedReader reader    = new BufferedReader(stream);  

while((leitor=reader.readLine() ) != null){
        	    	
   Arquivo_Abend colunas = new Arquivo_Abend();
   String [] novoArq = leitor.split(" ");  

   if(leitor.contains("ABENDED") || leitor.contains("FAILED") ||     
      leitor.contains("NOT CATLGD 2") || leitor.contains("UNEXPLA")){   
   if(novoArq[13].length() > 8){   

      colunas.setSISTEMA(novoArq[13].substring(0,2));
      colunas.setDT_PROCESSAMENTO(novoArq[2]);
      colunas.setHORA_INICIAL(novoArq[3].substring(0,4));
      colunas.setODATE(novoArq[4]);
      colunas.setJOB(novoArq[13].substring(0,8));
      colunas.setJOB_ID(novoArq[13].split("/")[1]);
      colunas.setUID(novoArq[14].substring(4,9));
   
      if(leitor.contains("UNEXPLA")){
         colunas.setOCORRENCIAS(novoArq[16] + " " + novoArq[18]);
    } else if (leitor.contains("NOT CATLGD 2")){   
         colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[16] + " " + novoArq[17] + " " + novoArq[18] + " " + novoArq[19]);    
    } else if (leitor.contains("FAILED")){
         colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[16] + " " + novoArq[17]);
    } else if (leitor.contains("ABENDED")){
         colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[17]);
    }	
          	     
      } 
    }  
  } 
} 
 }catch(IOException x){
   x.printStackTrace();
 }
}


public void inserirBD(){

 conectar();  
    	      try {  
    	          comando.executeUpdate("INSERT INTO Arquivo.Abend(SISTEMA,DT_PROCESSAMENTO,HORA_INICIAL,ODATE,JOB,JOB_ID,UID,OCORRENCIAS)" +
    	          "VALUES('" + dados.getSISTEMA() + "','" + dados.getDT_PROCESSAMENTO() + "','"+ dados.getHORA_INICIAL() + "','"
    	        		     + dados.getODATE() + "','" + dados.getJOB() + "','" + dados.getJOB_ID() + "','"
    	                     + dados.getUID() + "','" + dados.getOCORRENCIAS() + "')");  
    	         System.out.println("Dados Inseridos!");  
    	      } catch (SQLException e) {  
    	         imprimeErro("Erro ao inserir Dados", e.getMessage());  
    	      } finally {  
    	         fechar();  
    	      }
}

O que estou querendo é que o metodo inserirBD receba os dados da classe processamento para inserir no banco de dados.

como posso fazer isso ?

Ps: se eu colocar as instruções de INSERT do metodo inserirBD dentro do metodo processamento, os dados são inseridos sem problemas, mas gostaria que este processo fosse feito pelo metodo inserirBD.

Da forma que esta, ele apenas insere NULL.

Obrigado.

12 Respostas

brunosardao

Alguem pode dar uma força ? ou minha dúvida foi postada no tópico do forum errado ?

ViniGodoy

Rapaz, você posta no domingo do feriado da páscoa, as 9h da madrugada, e ainda espera que tenha gente aqui para te responder em menos de 40 minutos?
Tenha calma, o GUJ só funciona a todo vapor em dias de semana.

O que eu faria é o método inserirBD montar uma lista, com objetos do tipo Arquivo_Abend. Aí, ele poderia retornar essa lista.
Depois, o método inserir poderia ou receber uma lista como parâmetro, ou chamar diretamente o método processamento().

suelengc

Olá brunosardao!

Pelo que entendi, é no método processamento() que você recupera as informações a serem inseridas no banco de dados. E essas informações você guarda num objeto do tipo Arquivo_Abend.

Logo, uma opção é passar este objeto como parâmetro de entrada para o método inserirBD, ficando assim:

public void inserirBD(Arquivo_Abend dados){  
		conectar();    
		
		try {    
		      comando.executeUpdate("INSERT INTO Arquivo.Abend(SISTEMA,DT_PROCESSAMENTO,HORA_INICIAL,ODATE,JOB,JOB_ID,UID,OCORRENCIAS)" +  
		    		  				"VALUES('" + dados.getSISTEMA() + "','" + dados.getDT_PROCESSAMENTO() + "','"+ dados.getHORA_INICIAL() + "','"  
		    		  						   + dados.getODATE() + "','" + dados.getJOB() + "','" + dados.getJOB_ID() + "','"  
		    		  						   + dados.getUID() + "','" + dados.getOCORRENCIAS() + "')");    
		 
		      System.out.println("Dados Inseridos!");    
		} catch (SQLException e) {    
			imprimeErro("Erro ao inserir Dados", e.getMessage());    
		} finally {    
			fechar();    
		}  
	}

Abraços!

brunosardao

Primeiramente,
Viny, foi mal pela duplicação do tópico, não era esta a minha intenção, só postei novamente pois achei que o pedido de ajuda poderia estar no lugar errado, mas você ja me informou o que fazer quando acontecer.

Segundo,
não querendo ser mal educado, mas não estou com pressa mesmo tendo postado novamente informando se existia alguem para ajudar, o que acontece é que já havia postado outras informações em outros dias da semana quando esta quente o movimento aqui e simplismente não obtive ajuda, o tópico ficou vazio e não houve resposta. infelizmente não sou crânio em programação e necessito de ajuda como muitas outras pessoas aqui do forúm.

Suelengc,
Fiz como você falou, passei daquele jeito o parâmetro, porém no banco de dados só recebo NULL e não os dados que preciso. se eu colocar este comando SQL dentro do método processar, ao sim, ele adiciona normalmente os dados no banco.

Viny,
Fiz um teste também criando uma lista para adicionar os meus dados no método processar, tipo:

List<Arquivo_Abend> dados = new ArrayList<Arquivo_Abend>();

dados.add(colunas);

o problema, é que fiquei na dúvida e no retorno. seria algo do tipo return dados ?

Obrigado.

suelengc

Olá brunosardao!

Poste então mais informações sobre seu código, talvez postar sua classe inteira ou pelo menos o objeto Arquivo_Abend.

Um detalhe é que não vi no seu método processamento, uma chamada ao método inserirBD. Quando você está chamando ele?

Abraços!

brunosardao

Suelengc,

Obrigado, então abaixo estou postando todo o meu código:

Classe Arquivo

public class Arquivo_Abend {

	public String SISTEMA;
	public String DT_PROCESSAMENTO;
	public String HORA_INICIAL;
	public String ODATE;
	public String JOB;
	public String JOB_ID;
	public String UID;
	public String OCORRENCIAS;
	
	
	public String getSISTEMA() {
		return SISTEMA;
	}
	public void setSISTEMA(String sISTEMA) {
		SISTEMA = sISTEMA;
	}
	
	public String getDT_PROCESSAMENTO() {
		return DT_PROCESSAMENTO;
	}
	public void setDT_PROCESSAMENTO(String dT_PROCESSAMENTO) {
		DT_PROCESSAMENTO = dT_PROCESSAMENTO;
	}
	
	public String getHORA_INICIAL() {
		return HORA_INICIAL;
	}
	public void setHORA_INICIAL(String hORA_INICIAL) {
		HORA_INICIAL = hORA_INICIAL;
	}
	
	public String getODATE() {
		return ODATE;
	}
	public void setODATE(String oDATE) {
		ODATE = oDATE;
	}
	
	public String getJOB() {
		return JOB;
	}
	public void setJOB(String jOB) {
		JOB = jOB;
	}
	
	public String getJOB_ID() {
		return JOB_ID;
	}
	public void setJOB_ID(String jOB_ID) {
		JOB_ID = jOB_ID;
	}
	
	public String getUID() {
		return UID;
	}
	public void setUID(String uID) {
		UID = uID;
	}
	
	public String getOCORRENCIAS() {
		return OCORRENCIAS;
	}
	public void setOCORRENCIAS(String oCORRENCIAS) {
		OCORRENCIAS = oCORRENCIAS;
	}
	@Override
	public String toString() {
		return SISTEMA + " " + DT_PROCESSAMENTO + " " + HORA_INICIAL  + " " + ODATE + " "
	                   + " " + JOB + " " + JOB_ID + " " + UID +  " " + OCORRENCIAS;
	}

Classe processamento

public void ProcessarDados (){

     String leitor = null; 
    	    
     try{

        // CAPTURA AS LOGS DO DIRETORIO INFORMADO
        		File [] arquivos;
        		File dir = new File("C:/LOG/HG");
        		arquivos = dir.listFiles();
   
       //  LE TODOS OS ARQUIVOS QUE ESTAO NO DIRETORIO          
        		for (int i = 0; i < arquivos.length; i++){
                
        		System.out.println("Lendo o arquivo:" + arquivos[i].getName());	
        			
       //  LEITURA DOS DADOS DOS ARQUIVOS.
        		FileInputStream fis      = new FileInputStream(arquivos[i]);
        		InputStreamReader stream = new InputStreamReader(fis);
        		BufferedReader reader    = new BufferedReader(stream);  
    
      // CRIA UM OBJETO DA CLASSE ARQUIVO PARA INSERCAO DOS DADOS  			
       	      List<Arquivo_Abend> dados = new ArrayList<Arquivo_Abend>();	 
	       		
       // LOOP PARA PERCORRER OS ARQUIVOS ATÉ O ULTIMO REGISTRO		
        	    while((leitor=reader.readLine() ) != null){
        	    	
        	  Arquivo_Abend colunas = new Arquivo_Abend();
        	  
       // SEPARACAO DO ARQUIVO EM COLUNAS
       	    	String [] novoArq = leitor.split(" ");  
       	    	//System.out.println(retornaListaNumerada(novoArq));
 
       // CAPTURA APENAS AS INFORMACOES DOS ERROS
       	        if(leitor.contains("ABENDED") || leitor.contains("FAILED") ||     
          	       leitor.contains("NOT CATLGD 2") || leitor.contains("UNEXPLA")){   
          	     
       // FILTRA APENAS JOBS COM 8 POSICOES	
          	     if(novoArq[13].length() > 8){   
 
       //*** DIVISAO DAS COLUNAS *****
          	     
       //SISTEMA   	     
          	     colunas.setSISTEMA(novoArq[13].substring(0,2));
       //DATA DE PROCESSAMENTO   	     
          	     colunas.setDT_PROCESSAMENTO(novoArq[2]);
       //HORA   	     
          	     colunas.setHORA_INICIAL(novoArq[3].substring(0,4));
       //ODATE   	     
          	     colunas.setODATE(novoArq[4]);
       //JOB   	     
          	     colunas.setJOB(novoArq[13].substring(0,8));
       //JOB_ID   	     
          	     colunas.setJOB_ID(novoArq[13].split("/")[1]);
       //UID   	     
          	     colunas.setUID(novoArq[14].substring(4,9));
          	     
       //OCORRENCIAS   	     
          	     if(leitor.contains("UNEXPLA")){
          	       colunas.setOCORRENCIAS(novoArq[16] + " " + novoArq[18]);
    		   } else if (leitor.contains("NOT CATLGD 2")){   
    			   colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[16] + " " + novoArq[17] + " " + novoArq[18] + " " + novoArq[19]);    
    		   } else if (leitor.contains("FAILED")){
    			   colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[16] + " " + novoArq[17]);
    		   } else if (leitor.contains("ABENDED")){
    			   colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[17]);
    		   }	
           	     
          	     
          	   dados.add(colunas);  
          	     
         	 } // FECHA O SEGUNDO IF  
          }  // FECHA O PRIMEIRO IF
        
      } // FECHA O WHILE
  	    
  } //FECHA O FOR      
   
        		
        		
        		   
    }catch(IOException x){
    	x.printStackTrace();
    }
 }// FECHA O METODO     
   
   	 public void inserirBD(List<Arquivo_Abend> dados){
   				
   		 for(int i = 0; i < dados.size(); i++){
   			  conectar();  
    	      try {  
    	          comando.executeUpdate("INSERT INTO Arquivo.Abend(SISTEMA,DT_PROCESSAMENTO,HORA_INICIAL,ODATE,JOB,JOB_ID,UID,OCORRENCIAS)" +
    	          "VALUES('" + dados.get(i).getSISTEMA() + "','" + dados.get(i).getDT_PROCESSAMENTO() + "','"+ dados.get(i).getHORA_INICIAL() + "','"
    	        		     + dados.get(i).getODATE() + "','" + dados.get(i).getJOB() + "','" + dados.get(i).getJOB_ID() + "','"
    	                     + dados.get(i).getUID() + "','" + dados.get(i).getOCORRENCIAS() + "')");  
    	         System.out.println("Dados Inseridos!");  
    	      } catch (SQLException e) {  
    	         imprimeErro("Erro ao inserir Dados", e.getMessage());  
    	      } finally {  
    	         fechar();  
    	      }
   		   }
   		}
 

}//FECHA CLASSE

Mais uma vez, obrigado.

suelengc

Olá brunosardao!

Tente algo assim:

import java.util.*;
import java.io.*;

public class ex7 {
	public void ProcessarDados () {  
	  
	    String leitor = null;   
	          
	    try {  
			File [] arquivos;  
			File dir = new File("C:/LOG/HG");  
			arquivos = dir.listFiles();  
			
			for (int i = 0; i < arquivos.length; i++) {  
			     
				System.out.println("Lendo o arquivo:" + arquivos[i].getName());   
				              
		        FileInputStream fis      = new FileInputStream(arquivos[i]);  
		        InputStreamReader stream = new InputStreamReader(fis);  
		        BufferedReader reader    = new BufferedReader(stream);    
				 
		        List<Arquivo_Abend> dados = new ArrayList<Arquivo_Abend>();      
				          
		        while ((leitor=reader.readLine()) != null) {  
		        	Arquivo_Abend colunas = new Arquivo_Abend();  
				    String [] novoArq = leitor.split(" ");    
	
				    if(leitor.contains("ABENDED") || leitor.contains("FAILED") || leitor.contains("NOT CATLGD 2") || leitor.contains("UNEXPLA")) {     
				    	if(novoArq[13].length() > 8) {     
				    		colunas.setSISTEMA(novoArq[13].substring(0,2));  
				            colunas.setDT_PROCESSAMENTO(novoArq[2]);  
				            colunas.setHORA_INICIAL(novoArq[3].substring(0,4));  
				            colunas.setODATE(novoArq[4]);  
				            colunas.setJOB(novoArq[13].substring(0,8));  
				            colunas.setJOB_ID(novoArq[13].split("/")[1]);  
				            colunas.setUID(novoArq[14].substring(4,9));  
				               
							if(leitor.contains("UNEXPLA")) {  
								colunas.setOCORRENCIAS(novoArq[16] + " " + novoArq[18]);  
							} else if (leitor.contains("NOT CATLGD 2")) {     
								colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[16] + " " + novoArq[17] + " " + novoArq[18] + " " + novoArq[19]);      
							} else if (leitor.contains("FAILED")) {  
								colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[16] + " " + novoArq[17]);  
							} else if (leitor.contains("ABENDED")) {  
								colunas.setOCORRENCIAS(novoArq[15] + " " + novoArq[17]);  
							}      
							
							dados.add(colunas);    
				    	}    
				    }  
		        }
		        
		        inserirBD(dados);//Chama método para inserir as linhas na base a cada arquivo processado
			}    											     
	    } catch (IOException x) {  
	    	x.printStackTrace();  
	    }  
	}       
    
    public void inserirBD(List<Arquivo_Abend> dados) {  
        String strSQL;      
		try { 
	        for(int i = 0; i < dados.size(); i++) {  
				conectar();    
				   
				strSQL += "INSERT INTO Arquivo.Abend(SISTEMA, DT_PROCESSAMENTO, HORA_INICIAL, ODATE, JOB, JOB_ID, UID,OCORRENCIAS) ";
				strSQL += "VALUES('";
				strSQL += dados.get(i).getSISTEMA() + "','"; 
				strSQL += dados.get(i).getDT_PROCESSAMENTO() + "','"; 
				strSQL += dados.get(i).getHORA_INICIAL() + "','";  
				strSQL += dados.get(i).getODATE() + "','"; 
				strSQL += dados.get(i).getJOB() + "','";
				strSQL += dados.get(i).getJOB_ID() + "','";  
				strSQL += dados.get(i).getUID() + "','";
				strSQL += dados.get(i).getOCORRENCIAS() + "')";
						  
				comando.executeUpdate(strSQL);    
				System.out.println("Dados Inseridos!");    
        	}
		} catch (SQLException e) {    
			imprimeErro("Erro ao inserir Dados", e.getMessage());    
		} finally {    
			fechar();    
		} 
    }  
}

class Arquivo_Abend {  
	  
    public String SISTEMA;  
    public String DT_PROCESSAMENTO;  
    public String HORA_INICIAL;  
    public String ODATE;  
    public String JOB;  
    public String JOB_ID;  
    public String UID;  
    public String OCORRENCIAS;  
      
      
    public String getSISTEMA() {  
        return SISTEMA;  
    }  
    public void setSISTEMA(String sISTEMA) {  
        SISTEMA = sISTEMA;  
    }  
      
    public String getDT_PROCESSAMENTO() {  
        return DT_PROCESSAMENTO;  
    }  
    public void setDT_PROCESSAMENTO(String dT_PROCESSAMENTO) {  
        DT_PROCESSAMENTO = dT_PROCESSAMENTO;  
    }  
      
    public String getHORA_INICIAL() {  
        return HORA_INICIAL;  
    }  
    public void setHORA_INICIAL(String hORA_INICIAL) {  
        HORA_INICIAL = hORA_INICIAL;  
    }  
      
    public String getODATE() {  
        return ODATE;  
    }  
    public void setODATE(String oDATE) {  
        ODATE = oDATE;  
    }  
      
    public String getJOB() {  
        return JOB;  
    }  
    public void setJOB(String jOB) {  
        JOB = jOB;  
    }  
      
    public String getJOB_ID() {  
        return JOB_ID;  
    }  
    public void setJOB_ID(String jOB_ID) {  
        JOB_ID = jOB_ID;  
    }  
      
    public String getUID() {  
        return UID;  
    }  
    public void setUID(String uID) {  
        UID = uID;  
    }  
      
    public String getOCORRENCIAS() {  
        return OCORRENCIAS;  
    }  
    public void setOCORRENCIAS(String oCORRENCIAS) {  
        OCORRENCIAS = oCORRENCIAS;  
    }  
    @Override  
    public String toString() {  
        return SISTEMA + " " + DT_PROCESSAMENTO + " " + HORA_INICIAL  + " " + ODATE + " "  
                       + " " + JOB + " " + JOB_ID + " " + UID +  " " + OCORRENCIAS;  
    }  
}

Basicamente só adicionei a linha para chamar o inserirBD após o looping que cria a lista de Arquivo_Abend.

Abraços!

brunosardao

Aproveitando,

Neste metodo abaixo, eu estou passando como parâmentro, a lista que adicionei os dados acima no metodo processarDados().

Dentro dele, coloquei um for para buscar todos os dados da list e assim adicionar no banco.

Este procedimento esta correto ?

Depois na MAIN, como eu faço para executar este método inserirBD() com o parametro LIST que eu adicionei a ele :

public static void main(String[] args) {

	   Processamento processar = new Processamento();
                   processar.ProcessarDados();
                   processar.inserirBD(parametro LIST);
}
public void inserirBD(List&lt;Arquivo_Abend&gt; dados){
   				
   		 for(int i = 0; i &lt; dados.size(); i++){
   			  conectar();  
    	      try {  
    	          comando.executeUpdate("INSERT INTO Arquivo.Abend(SISTEMA,DT_PROCESSAMENTO,HORA_INICIAL,ODATE,JOB,JOB_ID,UID,OCORRENCIAS)" +
    	          "VALUES('" + dados.get(i).getSISTEMA() + "','" + dados.get(i).getDT_PROCESSAMENTO() + "','"+ dados.get(i).getHORA_INICIAL() + "','"
    	        		     + dados.get(i).getODATE() + "','" + dados.get(i).getJOB() + "','" + dados.get(i).getJOB_ID() + "','"
    	                     + dados.get(i).getUID() + "','" + dados.get(i).getOCORRENCIAS() + "')");  
    	         System.out.println("Dados Inseridos!");  
    	      } catch (SQLException e) {  
    	         imprimeErro("Erro ao inserir Dados", e.getMessage());  
    	      } finally {  
    	         fechar();  
    	      }
   		   }
   		}
suelengc

Olá brunosardao!

Você só pode chamar o método inserirBD() depois do ProcessarDados() se a linha abaixo estiver antes do início do loop for:

List<Arquivo_Abend> dados = new ArrayList<Arquivo_Abend>();

Se colocar a linha acima antes do looping for e fazer seu método ProcessarDados() retornar um objeto List<Arquivo_Abend> ao invés de ser void, seu main ficaria algo assim:

public static void main(String[] args) {  
       List<Arquivo_Abend> parametro;
       Processamento processar = new Processamento();  
       parametro = processar.ProcessarDados();  
       processar.inserirBD(parametro);
}

Abraços!

brunosardao

Suelengc,

Muito Obrigado, fiz como vc disse e esta dando certo, os dados estão sendo inseridos nao precisando instanciar aquele método da MAIN como tinha perguntado anteriormente.

Porém agora surgiu um novo problema,

Quando estou inserindo os dados, existe informações duplicadas e no banco de dados em um determinado campo, deixei setado para nao receber dados duplicado, mas ai acaba que eu recebo a mensagem abaixo:

Duplicate entry ‘39711’ for key ‘JOB_ID_UNIQUE’

O processo esta correto, realmente nao quero duplicado, mas quando ocorre este problema, a inserção de dados não continua.

o que eu poderia fazer para que caso o valor que esta sendo inserido no banco ja exista, ele pule esta informação e continue adicionando outras ?

mais uma vez obrigado.

suelengc

Olá brunosardao!

Não é a forma mais correta, mas uma opção seria a abaixo:

public void inserirBD(List<Arquivo_Abend> dados) {  
    String strSQL;
    conectar(); 
    for(int i = 0; i < dados.size(); i++) {  
		strSQL += "INSERT INTO Arquivo.Abend(SISTEMA, DT_PROCESSAMENTO, HORA_INICIAL, ODATE, JOB, JOB_ID, UID,OCORRENCIAS) ";
		strSQL += "VALUES('";
		strSQL += dados.get(i).getSISTEMA() + "','"; 
		strSQL += dados.get(i).getDT_PROCESSAMENTO() + "','"; 
		strSQL += dados.get(i).getHORA_INICIAL() + "','";  
		strSQL += dados.get(i).getODATE() + "','"; 
		strSQL += dados.get(i).getJOB() + "','";
		strSQL += dados.get(i).getJOB_ID() + "','";  
		strSQL += dados.get(i).getUID() + "','";
		strSQL += dados.get(i).getOCORRENCIAS() + "')";
		try {
			comando.executeUpdate(strSQL);
		} catch (SQLException e) {
			System.out.println("Erro ao tentar inserir o registro id: " + dados.get(i).getJOB_ID());
		}
		    
		System.out.println("Dados Inseridos!");
	}
    fechar();
}

Uma outra opção seria verificar antes se aquele registro já existe (criando um método para isso) e caso não exista, inserir. Mas o acesso ao banco de dados seria praticamente duplicado.

Abraços!

brunosardao

Suelengc,

Muitissimo Obrigado por sua ajuda…

Em relação as minha dúvida, já matou tudo, ta tudo resolvido, a inserção esta ocorrendo tranquilamente a não ser pelo dados duplicados que vou tentar me virar depois.

mas de primeiro momento ja me ajudou bastante.

Um grande abraço e obrigado.

Criado 8 de abril de 2012
Ultima resposta 8 de abr. de 2012
Respostas 12
Participantes 3