Classe DAO

Pessoal, olha soh esse codigo:

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


public class ContatoDAO {

	private Connection connection;
	
	public ContatoDAO() throws SQLException{
		this.connection = DriverManager.getConnection();
	}
	
	public void adiciona(Contatos contatos) throws SQLException{
		PreparedStatement stmt = this.connection.prepareStatement("insert into contatos(nome, email)values(?,?,?)");
		stmt.setString(1, contatos.getNome());
		stmt.setString(2, contatos.getEmail());
		stmt.execute();
		stmt.close();	
	}
}

Tipo, na apostila da caelum, em vez de usar a classe ConnectionFactory, usei a DriverManager, pois o eclipse nao reconhece a ConnectionFactory, alias, ela nem existe no javadoc, dah o seguinte erro:

java.sql.SQLException: No suitable driver
	at java.sql.DriverManager.getConnection(DriverManager.java:545)
	at java.sql.DriverManager.getConnection(DriverManager.java:171)
	at ContatoDAO.<init>(ContatoDAO.java:12)
	at Insere.main(Insere.java:14)

Bom meu querido, o erro acontece quando vc chama um método getConnection() da classe DriverManager esse método não é o método que vc quer chamar, o método que vc quer chamar é para criar uma conexão, ou seja, o método getConnection() da classe ConnectionFactory, como vc observou essa classe não existe no Javadoc por que essa classe vc que deve criar, o método getConnection da classe DriverManager é para estabelecer a conexão como o BD.Vou colocar abaixo como ficaria as classes. Outra coisa que eu observei é q vc só usa duas clausulas no insert da sua classe e na apostila da caelum ele usa três ficaria do jeito q esta na classe DAO abaixo, caso dê erro pode ser isso fique ligado.

[code]package br.com.euler.jdbc;

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

public class ConnectionFactory {

public static Connection getConnectionFactory() throws SQLException
{
	   try{
		Class.forName("com.mysql.jdbc.Driver");
		return DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "gisa_anjo");
	   }
	   catch(ClassNotFoundException e)
	   {
		  throw new SQLException(e.getMessage()); 
	   }
	
}

}
[/code]


package br.com.euler.jdbc;

 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 
 
 public class DAO {
 
 	private Connection connection;
 	
 	public DAO() throws SQLException{
 		this.connection = ConnectionFactory.getConnectionFactory();
 	}
 	
 	public void adiciona(Contato contatos) throws SQLException{
 		PreparedStatement stmt = this.connection.prepareStatement("insert into contatos(nome, email, endereco)values(?,?,?)");
 		stmt.setString(1, contatos.getNome());
 		stmt.setString(2, contatos.getEmail());
 		stmt.setString(3, contatos.getEndereco());
 		stmt.execute();
 		stmt.close();	
 	}
 }

[code]
package br.com.euler.jdbc;

import java.sql.SQLException;

public class TestaDAO {

public static void main ( String [] args ) throws SQLException
{   
	DAO dao = new DAO();
	Contato contato = new Contato();
	contato.setNome("Euler Homero");
	contato.setEmail("fiscalhomero@gmail.com");
	contato.setEndereco("Rua Samaria");
	dao.adiciona(contato);
	System.out.println("Conectado");
}	
}
[/code]

Bom, nosso amigo ai colocou um modelo diferente de conexão.

Mas quanto ao erro existente em seu codigo é que nao declarou nem o driver de conexao e nem os parametros de acesso ao banco.

Referem-se ao seguinte.

Ex.

Class.forName("com.mysql.jdbc.Driver")
DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "gisa_anjo");

Quanro a saber como fica essa implementação deve buscar suporte junto ao fornecedor do DB.

Até mais…

sim, vou testar pra ver, mas na verdade, usei duas clausulas no insert de proposito, na minha tabela do BD tem soh dois campo msm, obrigado pela atenção.

O problema eh o seguinte agora, o Class.forname naum tah achando o Driver, o pior eh q descompactei o mysqlconector no diretorio do meu projeto e nada, o ¨%$¨*%$*& do Class.forname() naum acha !!! olha soh a implementação:


package br.com.jdbc;

import java.sql.*;

public class ConnectionFactory {

	public static Connection getConnectionFactory() throws SQLException{
		try{
			Class.forName("com.mysql.jdbc.Driver");
			return DriverManager.getConnection("jdbc:mysql://localhost/familia", "root", "root");
			
		}catch(ClassNotFoundException e){
			System.out.println(e);
			throw new SQLException(e.getMessage());
		}
	}
}

up

ve se isso resolve seus problemas:

//faz a conexão com o banco public java.sql.Connection conn() throws ClassNotFoundException, SQLException { Connection c; Class.forName("com.mysql.jdbc.Driver"); String query = "jdbc:mysql://localhost/" + banco + "?user=root"; c = DriverManager.getConnection(query); return c; }

Utilização, exemplo:

PreparedStatement pst; String execute = "insert into tabela values(? ? ?)"; PreparedStatement pst = conn().prepareStatement(execute);

Ah sim, quanto ao conector…

Adicione ele no seu projeto, via IDE…

no netbeans por exemplo, tu aperta o botão direito do mouse em cima da pasta bibliotecas (padrão do netbeans), e adicionar pasta/jar , seleciona o conector, e pronto,

não esquece de dar uma verificada no classpath