Problema com JDBC e MySQL - No suitable Driver

Primeiro de tudo obrigado a todo mundo pois esse fórum sempre tirou todas as minhas dúvidas, mas dessa vez não achei em lugar algum alguma pista pra isso aqui:

Estou usando o plugin da Sysdeo pra iniciar o tomcat (5.0.18 ) de dentro do eclipse (3.0M8) e o MySQL como banco de dados, no windows, e quando vou testar a aplicação e preciso chamar a classe que gerencia o acesso a banco de dados, o método DriverManager.getConnection() retorna null, com a mensagem de exceção “No suitable driver”.
(linha connection = DriverManager.getConnection(url,userName,password); o resto do código tá no final)

O mysql-connector-java-3.0.11-stable-bin.jar está no classpath e adicionado como biblioteca no projeto do eclipse.

O ResourceBundle carrega os valores das variáveis sem problema (vide System.out.println()'s que exibiram os valores corretos) e a classe do driver que eu estou utilizando é “com.mysql.jdbc.Driver”.

Essa classe tem alguns outros métodos, mas são relacionadas a queries, updates e prepared statements, que precisam da conexão e do statement setados.

E pra ser só mais chato um pouco :smiley: , algumas dúvidas sobre melhores práticas:

1.Precisa daquele monte de catch mesmo pro newInstance(), ou uma exceção genérica já tá de bom tamanho?

2.Eu estava usando um esquema separado de setConnection(), setStatement() e no construtor chamava o Class.forName(driverName).newInstance() e depois chamada os dois métodos, é melhor assim ou do jeito que tá agora? (troquei tentando resolver esse problema do driver, mas foi em vão :P)

  1. Qual a diferença entre com.mysql.jdbc.Driver e org.gjt.mm.mysql.Driver? Existe alguma situação específica pro uso de cada uma delas?

Obrigado pela atenção,
Bernardo

segue abaixo o código da classe que gerencia o acesso ao banco:

import java.sql.*;
import java.util.ResourceBundle;

public class DatabaseManager {
private String driverName;
private String userName;
private String password;
private String url;

private Connection connection = null;
private Statement statement = null;
private PreparedStatement preparedStatement = null;

public DatabaseManager() {
	ResourceBundle bdl = ResourceBundle.getBundle("database");
	driverName = bdl.getString("driverName");
	userName = bdl.getString("userName");
	password = bdl.getString("password");
	url = bdl.getString("url");
	

	this.setStatement();
	
	System.out.println("Driver: "+driverName);
	System.out.println("User: "+userName);
	System.out.println("Password: "+password);
	System.out.println("Url: "+url);
	
}

private void setStatement() {
	try {
		Class.forName(driverName).newInstance();
		connection = DriverManager.getConnection(url,userName,password);
		statement = connection.createStatement();
	}
	catch(SQLException sqle) {
		System.err.println(sqle.getMessage());
		sqle.printStackTrace();
	}
	catch(ClassNotFoundException cnfe) {
		System.err.println("Class "+driverName+" not found.");
		cnfe.printStackTrace();
	}
	catch(InstantiationException ie) {
		System.err.println(ie.getMessage());
		ie.printStackTrace();
	}
	catch(IllegalAccessException iae) {
		System.err.println(iae.getMessage());			
		iae.printStackTrace();
	}
}

}

A lib esta dentro do WEB-INF/lib ?

A diferenca entre os nomes dos drivesr eh que o primeiro eh o do connector/j, da propria mysql.com … o outro era do driver independente que o cara tinha. O nome mudou depois que a mysql contrarou o autor do driver pra trabalhar la.

Rafael

tá sim

Testa colocar o jar do MySQL no diretório “common/lib” do Tomcat.

Em vez de usar aquele monte de catch você pode usar o catch(Exception e).
Mas não é muito recomendado.

Eu usaria assim:

public DatabaseManager() {
	try {
		Class.forName("org.gjt.mm.mysql.Driver").newInstance();
	}
	catch(Exception e) {
		e.printStackTrace();
	}
}

public static Connection getConnection() throws SQLException {
	Connection conn = null;
	conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/DB", "user", "senha");
	return conn;
}

Tentei, mas deu na mesma…vou tentar um outor banco, alguma idéia pra um teste rápido?

Tentei, mas deu na mesma…vou tentar um outor banco, alguma idéia pra um teste rápido?[/quote]

Pelo erro que você relatou, não parece que o erro é com o Banco.
Verifique se está chamando corretamente a sua Classe de conexão ou teste utilizar um versão anterior do Tomcat.

[quote=“eberteles”]
Pelo erro que você relatou, não parece que o erro é com o Banco.
Verifique se está chamando corretamente a sua Classe de conexão ou teste utilizar um versão anterior do Tomcat.[/quote]

Sabe aquele erro tão básico que você nem nota? poisé, tava só jdbc:///banco e não jdbc:mysql:///banco :oops: :stuck_out_tongue:

Foi mal e obrigado pela paciência aí #P

Uma outra coisinha, tem como usar o java.sql.PreparedStatement ou tem que usar o do driver do mysql ou não dá pra usar de jeito nenhum?

Dá pra usar java.sql.PreparedStatement tranquilamente. :wink:

[]'s