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