Conexão Java - Banco de Dados

18 respostas
thitkd

[b]Boa noite pessoal,

Eu não programo a muito, e por este motivo estou com problemas em conexão Java com o Banco de Dados MySQL.
Por favor, ajudem-me.[/b]

package br.com.caelum.jdbc.teste;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;

public class TestaConexao {

	/**
	 * @param args
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws SQLException {
		Connection connection = null;
		connection = new ConnectionFactory().getConnection();
		
			System.out.println("Conexão Aberta !!! ");
			connection.close();

			// Criação ContatoDAO
			ContatoDAO dao = new ContatoDAO();
			
			//Listagem de Contatos com o DAO
			List<Contato> contatos = dao.getLista();
			
			// Itere na lista e imprima as informações dos contatos
			for (Contato contato:contatos){
				
				System.out.println("Nome: "+contato.getNome());
				System.out.println("Email: "+contato.getEmail());
				System.out.println("Encereço: "+contato.getEndereco());
				System.out.println("Data de Nacimento "+contato.getDataNascimento().getTime()+"\n");
				
			}
			
	}

}

E aparece o seguinte erro:

Conectando ao banco
Exception in thread "main" java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:33)
	at br.com.caelum.jdbc.teste.TestaConexao.main(TestaConexao.java:19)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	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:411)
	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	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:411)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:31)
	... 1 more
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
	... 16 more

[b]O que posso fazer, sabem dizer onde estou errando?

Obrigado,
:slight_smile:

[/b]

18 Respostas

Hebert_Coelho

java.net.ConnectException: Connection refused: connect

Confira para onde a URL do seu banco está apontando.

thitkd

Tenho o seguinte problema, de Java eu entendo um pouco, mas de BD, eu não entendo nada.
Como posso verificar isso?

Hebert_Coelho

Em algum lugar você passa uma URL para conectar ao DB.

Onde é?

thitkd

Como pedido:

package br.com.caelum.jdbc;

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

public class ConnectionFactory { // Responsavel por abrir conexão com B.D.

	/**private static final String DRIVER = "oracle.jdbc.OracleDriver";
	private static final String DATABASE = "XE";
	private static final String IP = "127.0.0.1";
	private static final String STR_CON = "jdbc:oracle:thin:@" + IP + ":1521/"
			+ DATABASE;
	private static final String USER = "user";
	private static final String PASSWORD = "password";

	public Connection getConnection() throws ClassNotFoundException {
		try {

			return DriverManager.getConnection(
					"jdbc:oracle:thin:@ + IP+127.0.0.1:1521/XE", "system",
					"123456");
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
*/
	public Connection getConnection() {
			System.out.println("Conectando ao banco");
		try {
			return DriverManager.getConnection("jdbc:mysql://localhost/FJ-21CS", "root", "cauthion");
			} catch(SQLException e) {
				throw new RuntimeException(e);
				}
		}
}

Obrigado pela ajuda.

satangoss

Na sua classe ContatoDAO deve ter o código da criação da conexão posta eles ai.

thitkd
package br.com.caelum.jdbc.dao;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;
  
public class ContatoDAO {
	// a conexão com o banco de dados
	private java.sql.Connection connection;
	public ContatoDAO() {
		this.connection = new ConnectionFactory().getConnection(); // Conexão BD
	}
      
    public void adiciona(Contato contato) {  // Adição de Contatos
    	String sql = "insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";  
          
        try {  
            // prepared statement para inserção  
        	PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);
              
            // seta os valores  
            stmt.setString(1, contato.getNome());  
            stmt.setString(2, contato.getEmail());  
            stmt.setString(3, contato.getEndereco());  
            stmt.setDate(4, new Date( contato.getDataNascimento().getTimeInMillis() ));  
              
            // executa  
            stmt.execute();  
            stmt.close();  
        } catch (SQLException e) {  
            throw new RuntimeException();  
        }  
     
     }
    
    public List <Contato> getLista(){
    	
    	try {
    		List<Contato> contatos = new ArrayList<Contato>();
    		PreparedStatement stmt=this.connection.prepareStatement("select * from contatos");
    		ResultSet rs=stmt.executeQuery();
    		
    		while (rs.next()) {
    			//Criando o Objeto Contatos
    			Contato contato = new Contato();
    			contato.setId(rs.getLong("id"));
    			contato.setNome(rs.getString("nome"));
    			contato.setEmail(rs.getString("email"));
    			contato.setEndereco(rs.getString("endereco"));
    			
    			//Montando Data atravez do "Calendar"
    			Calendar data = Calendar.getInstance();
    			data.setTime(rs.getDate("dataNascimento"));
    			contato.setDataNascimento(data);
    			
    			//Adicionando Objeto a Lista
    			contatos.add(contato);
			}
    		rs.close();
    		stmt.close();
    		return contatos;
    	}catch (SQLException e) {
    		throw new RuntimeException(e);
		}
    }
}
Hebert_Coelho

Olha aqui: http://www.guj.com.br/java/74632-jdbc-mysql

Sua URL tá faltando a porta.

jvkirk

vc adicionou na biblioteca o connector?

adiciona aí e faça o seguinte

public Connection getConnection() throws SQLException { try { Class.forName("com.mysql.jdbc.Driver");//olha o driver aí XD System.out.println("Conectando ao banco"); return DriverManager.getConnection("jdbc:mysql://localhost/FJ-21CS", "root", "cauthion"); } catch (ClassNotFoundException e) { throw new SQLException(e.getCause()); } }

jvkirk

thitkd

Eu estava Fazendo, e quando VOCÊ me Passou o Código, eu apenas copiei e DEU o seguinte Erro:

Conectando ao banco
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	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:411)
	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	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:411)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:35)
	at br.com.caelum.jdbc.teste.TestaConexao.main(TestaConexao.java:19)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
	... 16 more
Hebert_Coelho

Fez oq eu coloquei ali em cima?

thitkd

Fiz agora, e continuou dando erro, fiz desta forma:

public Connection getConnection() {
			System.out.println("Conectando ao banco");
		try {
			return DriverManager.getConnection("jdbc:mysql://localhost:3306/FJ-21CS", "root", "cauthion");
			} catch(SQLException e) {
				throw new RuntimeException(e);
				}
		}
}
Hebert_Coelho

O DB está na sua máquina? Você instalou de modo padrão? Essa é a porta mesmo? Você consegue conectar por uma IDE?

O serviço dele está ativo?

thitkd

Sim, instalei e ele utiliza a porta 3306 (padrão).
Tentei acesso via web, mas não consegui (http://localhost:3306/FJ-21CS)

Hebert_Coelho

Veja se o firewall da sua máquina não está bloqueando o DB.

Hebert_Coelho

Vc criou o Database?

thitkd

Tenho o norton 360 e ele não está bloqueando, porque adicionei o MySQL e o Eclipse na liberação do Firewall.

thitkd

Microsoft é F…

Hebert_Coelho

Ta resolvido então?

Se sim, coloca um [Resolvido] no titulo do post para ajudar outros. [=

Criado 7 de dezembro de 2011
Ultima resposta 7 de dez. de 2011
Respostas 18
Participantes 4