Erro ao cadastrar no Banco de dados [resolvido]

5 respostas
denisspitfire

O erro acontece nesse ponto.

Conectando ao banco
3863
Conectando ao banco

ou seja o 3864 registro nao foi cadastrado.

oque pode ter acontecido?

codigo:

package br.com.sisnov.jdbc;

import java.util.Calendar;

public class TestaInsere {
	public static void main(String[] args) {
		Contato contato = new Contato();
		for (int i = 0; i < 30000; i++) {
			contato.setNome("Nome do usuario");
			contato.setEmail("[email removido]");
			contato.setEndereco("endreço");
			contato.setDataNascimento(Calendar.getInstance());
			
			ContatoDAO dao = new ContatoDAO();
			dao.adiciona(contato);
			System.out.println(i);	
		}
	}
}
package br.com.sisnov.jdbc;

import java.sql.Connection;
import java.sql.SQLException;

public class TestaConexao {
	public static void main(String[] args) throws SQLException {
		Connection connection = new ConnectionFactory().getConnection();
		System.out.println("Conexao aberta!");
		connection.close();
	}
}
package br.com.sisnov.jdbc;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class ContatoDAO {
	private Connection connection;

	public ContatoDAO() {
		this.connection = new ConnectionFactory().getConnection();
	}

	public void adiciona(Contato contato) {
		String sql = "insert into contatos(nome,email,endereco,dataNascimento) values (?,?,?,?)";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento()
					.getTimeInMillis()));
			stmt.execute();
			stmt.close();

		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
}
package br.com.sisnov.jdbc;
import java.util.Calendar;

public class Contato {
	private Long id;
	private String nome;
	private String email;
	private String endereco;
	private Calendar dataNascimento;
	//ctrl + 3
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public Calendar getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	
	
}
package br.com.sisnov.jdbc;

import java.sql.*;

public class ConnectionFactory {
	public Connection getConnection() {
		System.out.println("Conectando ao banco");
		try {
			return DriverManager.getConnection("jdbc:mysql://localhost/teste",
					"root", "12345");
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
}

postei todo o código pois nao sei se é um erro de performance.
e este é a exception que aparece.

Exception in thread "main" java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
	at br.com.sisnov.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:12)
	at br.com.sisnov.jdbc.ContatoDAO.<init>(ContatoDAO.java:12)
	at br.com.sisnov.jdbc.TestaInsere.main(TestaInsere.java:14)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
	at com.mysql.jdbc.Util.getInstance(Util.java:381)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1096)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2048)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:723)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
	at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at br.com.sisnov.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:9)
	... 2 more

5 Respostas

R

Basta ler o stacktrace:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
Bianca_Rosa

Como disseram acima, basta ler o stacktrace.

Te ajudando um pouco mais, perceba que dentro do seu DAO você cria uma conexão toda vez que instancia ele.

Ou seja, você tentou fazer 30000 dao.adiciona(contato). 30000 conexões.

Faz o seguinte: instancia o dao do lado de fora do seu loop. Você não precisa instanciar um DAO por contato, e sim um contato para cada iteração para adicionar no seu dao já existente.

R

Bianca Rosa:
Como disseram acima, basta ler o stacktrace.

Te ajudando um pouco mais, perceba que dentro do seu DAO você cria uma conexão toda vez que instancia ele.

Ou seja, você tentou fazer 30000 dao.adiciona(contato). 30000 conexões.

Faz o seguinte: instancia o dao do lado de fora do seu loop. Você não precisa instanciar um DAO por contato, e sim um contato para cada iteração para adicionar no seu dao já existente.

Muito bom garotinha :smiley:

Bianca_Rosa

raf4ever:
Bianca Rosa:
Como disseram acima, basta ler o stacktrace.

Te ajudando um pouco mais, perceba que dentro do seu DAO você cria uma conexão toda vez que instancia ele.

Ou seja, você tentou fazer 30000 dao.adiciona(contato). 30000 conexões.

Faz o seguinte: instancia o dao do lado de fora do seu loop. Você não precisa instanciar um DAO por contato, e sim um contato para cada iteração para adicionar no seu dao já existente.

Muito bom garotinha :smiley:

Me senti com cinco anos a menos agora hahaha

denisspitfire

aeee vlw, identifiquei só agora o problema fiquei mó feliz quando eu chego no forum ja resolveram com maior facilidade kkkkk
mó triste isso kkkkkkkkkk
vlw galera

Criado 20 de março de 2012
Ultima resposta 20 de mar. de 2012
Respostas 5
Participantes 3