Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

1 resposta
EuclidesFilizola

Ae pessoal, Bom dia a todos. Gostaria que me ajudassem no seguinte problema. Eu estou tentando atualizar um banco em MsAccess com um banco PostgreSQL. E então, vejam o que acontece.

essa é minha classe main:

public class ComparacaoDB {

	
	private static Connection conexaoPostgreSQL;
	private static Connection conexaoMSAccess;
	
	public static void main(String[] args) {

		//try {
	

			ConexaoMSAccess conexaoAccess = new ConexaoMSAccess();
			ConexaoPostgreSQL conexaoPostgre = new ConexaoPostgreSQL();

		

			try {
				
				conexaoAccess.getConexao();
				conexaoPostgre.AtualizarPorNome(conexaoAccess.ListarNome(), conexaoAccess.getConexao());
			//	conexaoAccess.ListarCPF();
				System.exit(0);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.exit(1);
			}
			

	//	}catch(SQLException sqlex) {

	//		sqlex.printStackTrace();
			
	//	}
		
	
	}

}

Não liguem pros " // " … pq são testes… ehehe

e ae, esse é meu método atualiza.

public void AtualizarPorNome(ArrayList<String> nomes, Connection BancoAccess) {

		try {

			conn = ConexaoPostgreSQL.getConexao();
			 
			PreparedStatement stmt = conn
					.prepareStatement("SELECT * FROM sppweb.produtor order by cod_produtor");
		
			// executa um select
			ResultSet rs = stmt.executeQuery();
			
			// recebe propriedades da tabela
			ResultSetMetaData rsmd = rs.getMetaData();

			// quantidade de colunas
			int qntDeColuna = rsmd.getColumnCount();
			// String tipoDeColuna;

	      	while (rs.next()) {
				if (rs.getString("nome_produtor").equals(nomes.get(11))){
					
					// percorre tods os campos do filtro encontrado
					// e adiciona todos os itens em um arrayList de objetos
					for (int i = 1; i <= qntDeColuna; i++) {

						ListaDosCampos.add(rs.getObject(i));

						// verifica se o objeto é do tipo String
						// se for, o imprime no console

						if (ListaDosCampos.get(i - 1) instanceof String) {

							String campo = (String) ListaDosCampos.get(i - 1);
							System.out.println(campo);
							
						}
						
				//		if (ListaDosCampos.get(i - 1) instanceof Long) {

				//			Long numero = (Long) ListaDosCampos.get(i - 1);
				//			System.out.println(numero);
				//		}

					}
					
//	nomeAtualizado = rs.getString("nome_produtor");
//	BancoAccess.prepareStatement("UPDATE * FROM NOME_PROD WHERE NOME_PROD like'%'" + nomeAtualizado+ "'%' ");
				
			}
	      	} 
	      	System.out.println(ListaDosCampos.size());
	      	
	    	rs.close();
			stmt.close();
			conn.close();
			BancoAccess.close();
		
			
		}catch (SQLException sqlex) {
			
			
			sqlex.printStackTrace();
			
		}
	
		}

Esse é meu método listarNome

public ArrayList<String> ListarNome() {

		String nomes;

		try {

			conn = this.getConexao();

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

			// executa um select
			ResultSet rs = stmt.executeQuery();

			// itera no ResultSet

			while (rs.next()) {

				// adiciona em caa posição do array o cpf
				// de acordo com a posição da chave

				ListaNome.add(rs.getString(1));

			}

			// for para retirar todos os acentos ortográficos
			// para que possa ser comparado no DB
			for (int i = 0; i < ListaNome.size(); i++) {

				nomes = ListaNome.get(i);

				// verifica se apelido é null , se for
				// atribui um valor vazio
				if (nomes == null) {
					nomes = "";
				}

				// remove os acentos ortográficos de cada apelido
				nomes = Normalizer.normalize(nomes, Normalizer.Form.NFD);
				nomes = nomes.replaceAll("[^\p{ASCII}]", "");
				ListaNome.set(i, nomes);

			}
			
			for (int i=0;i<ListaNome.size();i++){
				System.out.println(ListaNome.get(i));
			}
		
			rs.close();
			stmt.close();
			conn.close();

		} catch (SQLException sqlex) {
			sqlex.printStackTrace();
		}
		return ListaNome;
	}

e ae. qndo executo, aparece …

Exception in thread “main” java.lang.OutOfMemoryError: Java heap space

… alguém pode me ajudar. ?

1 Resposta

EuclidesFilizola

Pessoal, resolvi meu problema. Primeiramente fui na opção Run / Run Configurations / arguments , VM arguments coloquei esses valores: -Xms128m -Xmx128m. Continuou dando erro, e então eu mudei a forma de da um select.

dessa seguinte forma:

no método AtualizarNome() ficou assim:

public void AtualizarPorNome(ArrayList<String> nomes, Connection BancoAccess) {

		try {
			conn = ConexaoPostgreSQL.getConexao();
			
		//	for(int i=0; i<nomes.size();i++){
				
				PreparedStatement stmt = conn
				.prepareStatement("SELECT * FROM sppweb.produtor WHERE nome_produtor like '%"+nomes.get(i)+"%' order by cod_produtor");
				
				// executa um select
				ResultSet rs = stmt.executeQuery();
				
				// recebe propriedades da tabela
				ResultSetMetaData rsmd = rs.getMetaData();

				// quantidade de colunas
				int qntDeColuna = rsmd.getColumnCount();
				// String tipoDeColuna;
				
				while(rs.next()) {
					
					// percorre tods os campos do filtro encontrado
					// e adiciona todos os itens em um arrayList de objetos
					for (int j = 1; j <= qntDeColuna; j++) {

						ListaDosCampos.add(rs.getObject(j));

						// verifica se o objeto é do tipo String
						// se for, o imprime no console

						if (ListaDosCampos.get(j-1) instanceof String) {

							String campo = (String) ListaDosCampos.get(j - 1);
							System.out.println(campo);
							
						}
						
						if (ListaDosCampos.get(j - 1) instanceof Long) {

							Long numero = (Long) ListaDosCampos.get(j - 1);
							System.out.println(numero);
						}

					}
					
				}
		      	
		    	rs.close();
				stmt.close();
				conn.close();
				BancoAccess.close();
				
			
		}catch (SQLException sqlex) {
			
			
			sqlex.printStackTrace();
			
		}
	
		}

Abraços a todos. !

Criado 30 de outubro de 2008
Ultima resposta 30 de out. de 2008
Respostas 1
Participantes 1