Excesso de Consulta e Insersão de Dados no MYSQL

6 respostas
H

Pessoal Esse código abaixo é chamando por uma classe controladora que acessa esse DAO e persiste os dados do tipo Jogador.
Meu Problema é o Seguinte: Tenho uma lista que possui 10000 Jogadores com nomes repetidos, ja instanciados e pretendo inseri-los no banco, mais não pode ter jogador com o nome repetido.
O banco insere 996 registros, e criei um contador que visualiza o número de registros lidos 3906. "O restante ta com o nome repetido". Ainda existe muitos jogadores para serem inseridos, Porém cai na excessão e encerra o programa.

Meu Programa ta com algum erro, ou é limite de consultas seguidas no MYSQL ??? como tratar isso :( :(

public CRUDJogador() {
		ConexaoBancoMysql conexao = new ConexaoBancoMysql();
		this.conex = conexao.conectarParaManipular();
	}
	private void fechaConexao() {
		try {
			this.conex.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public void salvarNovoJogador(Jogador jogador) {
		try {

			String consultaExisteNome = "Select * FROM TB_JOGADOR WHERE nome = "
					+ '"' + jogador.getNome() + '"';
			System.out.println("jogador=" + jogador.getNome());
			System.out.println("conexao= " + this.conex);
			
			PreparedStatement stmt = conex.prepareStatement(consultaExisteNome);
			ResultSet rs = stmt.executeQuery(consultaExisteNome);

			if (rs.next() == true) {
				System.out.println("Relacional "
						+ ((Funcionario) jogador).getNome()
						+ " com nome ja existente no banco");
				this.fechaConexao();
			} 
			else 
			{
				String sqlInsereJogador = "INSERT INTO TB_JOGADOR(nome,telefone,email,posicao,idade) VALUES((?), (?), (?), (?), (?))";

				PreparedStatement stmt1 = conex
						.prepareStatement(sqlInsereJogador);

				stmt1.setString(1, jogador.getNome());
				stmt1.setString(2, jogador.getTelefone());
				stmt1.setString(3, jogador.getEmail());
				stmt1.setString(4, jogador.getPosicao());
				stmt1.setString(5, jogador.getIdade());
				stmt1.executeUpdate();
				stmt1.close();
				this.fechaConexao();
			}
		} 
		catch (SQLException e) 
		{
			System.out.println("conexao=" + this.conex);
			System.out.println(e.toString());
			e.printStackTrace();
		}
	}

6 Respostas

Victor_Neves

mas qual o erro que aparece no log?

H

O processamento vem, ai a conexão cai fica nula !!!

ajudem plz ja tentei tudo

conexao= com.mysql.jdbc.JDBC4Connection@19c4844 Relacional C.Odherban com nome ja existente no banco ta caindo na excessao=null i= 3936 6060 jogador=A.Odilon conexao= null Exception in thread "main" java.lang.NullPointerException at AcessBancoRelacional.CRUDJogador.salvarNovoJogador(CRUDJogador.java:35) at CCController.CJogador.salvaJogadorBancoApartirTXT(CJogador.java:89) at Teste.Main.main(Main.java:30)

Victor_Neves

cara… eu acho, que o problema é que voce esta atribuindo uma classe do tipo ConexaoBancoMysql a algo que nao é do tipo Connection…

essa variavel conex, certifique-se de que ela é do tipo connection… e ve se o metodo conectarParaManipular() esta de fato retornando um objeto do tipo connection.

tenta fazer assim

Connnection conex = ConexaoBancoMysql().conectarParaManipular();

deixe o metodo como static e que retorne uma Connection…

H

Tipo, eu instancio a classe Connection em outra classe

public class ConexaoBancoMysql {
	private Connection con;
	static final String NOME_BANCO_MYSQL = "bancocampeonato";

	public Connection conectarParaManipular() {
		try {

			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/"
					+ NOME_BANCO_MYSQL, "root", "");

		} catch (SQLException e) {
			System.out.println("ta caindo na excessao=" + con);
		}
		return con;
	}
}

A minha classe abaixo quando é instanciada "CONSTRUTOR" chama essa classe de conexão abrindo a conexão para mim.

Está funcionando desse jeito, so que não esta inserindo mais que 996 registros no banco quando eu faço consulta primeiro para ver se já existe o Nome do Jogador no Banco !!!!

aff não entendo o erro

:cry: :cry: :cry:

eduardoromcy

Se você tiver colado do seu código, ajeita sua String consultaExisteNome para:

O erro que está dando é que o seu IF de verificar se já existe não estava funcionando, então ele tentava inserir em duplicidade e gerava o erro.
Fazendo a correção sugerida o mesmo ira funcionar e evitar a Exception.

Boa sorte.

H

Eu descobri o erro, na verdade não está no select.

E sim dentro do if,o que acontecia era que ele realizava corretamente aproximadamente 4000 vezes. Porém eu esqueci do seguinte comando dentro do if:

if (rs.next() == true) { System.out.println("Relacional " + ((Funcionario) jogador).getNome() + " com nome ja existente no banco"); rs.close(); // comando faltante this.fechaConexao(); }

Eu esqueci de fechar o result então chegava uma hora que estourava e dava erro no programa.

Obrigado Colegas :-o :smiley:

Criado 20 de março de 2010
Ultima resposta 23 de mar. de 2010
Respostas 6
Participantes 3