Problemas em transformar string em número

Bom dia pessoal, estou com o seguinte problema. Tenho o método abaixo:


public ArrayList<Integer> ListarCPF() {

		String query;
		try {
			conn = this.getConexao();

			query = "SELECT CPF_CNPJ FROM FRENTE ORDER BY CHAVE";
			
			PreparedStatement stmt = conn.prepareStatement(query);

			// executa um select
			ResultSet rs = stmt.executeQuery();
		 
		String cpfString=""; 
		
		int n=0;
				
		while (rs.next()) {
				
			arrayCPF.add(rs.getString(1));  
			  
			
			}
		
		
		for(int i=0; i<arrayCPF.size();i++){
			
			if (arrayCPF.get(i) instanceof String){
			
			cpfString = (String) arrayCPF.get(i);
			
	    if(cpfString == null) {
				
				cpfString = "0";
			
			}
		    
		    if (cpfString != null && !"".equals(cpfString)){  
		    	
		    	cpfString = cpfString.replaceAll("\.|-",""); //retira pontos e traços  
		    	
		        n = Integer.parseInt( (String) cpfString);  
		    }  
					
	  n = Integer.parseInt(cpfString);
	
				    ListaCPF.add(n); 
		  
		}
		}
		
		
		System.out.println("inserção concluída");
			
			for(int i =0; i< ListaCPF.size(); i++){
				System.out.println(ListaCPF.get(i));
			
			
			}
			rs.close();
			stmt.close();
			conn.close();

		} catch (SQLException sqlex ) {
			sqlex.printStackTrace();
			
		} catch (NumberFormatException e ) {
			e.printStackTrace();
		}
		return ListaCPF;
	}

e me retorna o seguinte erro:

java.lang.NumberFormatException: For input string: “03454021383”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at br.gov.adagri.ConexaoMSAccess.ListarCPF(ConexaoMSAccess.java:171)
at br.gov.adagri.ComparacaoDB.main(ComparacaoDB.java:24)

a linha 171 é essa:

 n = Integer.parseInt(cpfString);  

alguém saberia me dizer o porquê?

Seu número é muito grande pra caber em um inteiro.

Essa conversão de CPF de String para int não faz muito sentido ao meu ver, pq não deixar o CPF como String?

Mas se mesmo assim quiser fazer isso, use long.

Utilize campos numéricos quando existir necessidade de efetuar algum tipo de operação matemática com eles :wink:

Eu não vejo nenhuma vantagem em tratar um CPF como número em condições normais.

Eh, tb concordo que o cpf não deveria ser numérico, deveria ser string mesmo.

Mas se quiser mesmo assim, substitua sua variável n para long e o seu ArrayList tb pra long…

p/ saber se vai alcançar os números máximos de um Integer, consulte esse link: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Integer.html#MAX_VALUE

t+

Usando String para o cpf você tem a vantagem de poder colocar pontos entre como separadores e - no final.

Outra vantagem é a possibilidade de fazer buscas a partir de parte do CPF. Por exemplo, vc pode buscar todos os CPFs que possuem a sequencia “123”.

È tem isso também, a vantagem de poder picar a String …

Pessoal, o problema é simples.

eu preciso comparar 2 bancos. e um dos filtros é o CPF.

porque não deixar cpf como String? Porque a tabela cpf no banco postgre está em bigInt,

enquanto na tabela de ACCESS ela é string… então eu faço um array pra pegar os valores dos cpfs da ACCESS e as comparos com a do postgre, por isso eu precisei converter.

Tem um jeito de comparar mesmo ela sendo string ? Eu ouvi falar em algo como comparator, mas não consegui implementar

alguém poderia me da uma força ? Agradeço a todos.

Pessoal, meu problema eu consegui resolver. porém tenho outros.

mas olha só como ficou


public ArrayList<Long> ListarCPF() {

		String query;
		try {
			conn = this.getConexao();

			query = "SELECT CPF_CNPJ FROM FRENTE ORDER BY CHAVE";
			
			PreparedStatement stmt = conn.prepareStatement(query);

			// executa um select
			ResultSet rs = stmt.executeQuery();
		 
		String cpfString; 
		
		Long n;
				
		while (rs.next()) {
				
			arrayCPF.add(rs.getObject(1));  
			
			
			
			}
		
		
		for(int i=0; i<arrayCPF.size();i++){
			
			if(arrayCPF.get(i) == null){
				cpfString = "1";
				
			}
			
			if (arrayCPF.get(i) instanceof String){
			
			cpfString = (String) arrayCPF.get(i);
			
			
	  // if(cpfString == null) {
			
		//		cpfString = "1";
			
			//}
		    
			
		    if (cpfString != null && !"".equals(cpfString)){  
		    	
		    	cpfString = cpfString.replaceAll(" ",""); //retira pontos e traços  
		    	
		        n = Long.parseLong(cpfString);  
		    }  
					
		    n = Long.parseLong(cpfString); 
			
	    
				    ListaCPF.add(n); 
		  
		}
		}
		
			
			//for(int i =0; i< ListaCPF.size(); i++){
			//	System.out.println(ListaCPF.get(i));
			//}
		
			rs.close();
			stmt.close();
			conn.close();

		} catch (SQLException sqlex ) {
			sqlex.printStackTrace();
			
		} catch (NumberFormatException e ) {
			e.printStackTrace();
		}
		return ListaCPF;
	}

=D

Eu já vi lugares em que se armazena CPF e/ou CNPJ como um número (tem de ser algo que caiba em um long, porque um int não tem dígitos suficientes). Em outros lugares chegam ao cúmulo de não guardar os dígitos de verificação (isso porque eles podem ser recalculados).
Mas o caso pior é na Caixa. Lá há alguns sistemas onde algumas tabelas contém um único campo, tanto para o CPF como para o CNPJ (tudo bem), mas se esqueceram de deixar um campo para indicar se esse número é CPF ou CNPJ. Argh

[quote=EuclidesFilizola]Pessoal, meu problema eu consegui resolver. porém tenho outros.

=D[/quote]

Eu não sou um compilador humano, melhor falar qual é o problema para ajudarmos do que jogar um monte de código. :smiley: