Problema com JDBC e MySQL - No suitable Driver

7 respostas
B

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();
	}
}

}

7 Respostas

Rafael_Steil

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

B

tá sim

eberteles

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;
}
B

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

eberteles

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

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.

B

“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.

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?

caiofilipini

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

[]'s

Criado 6 de abril de 2004
Ultima resposta 6 de abr. de 2004
Respostas 7
Participantes 4