Porém, precisamos antes “carregar” o driver, de tal maneira que o Java saiba que ele existe, e possa usá-lo se necessário. Normalmente, os livros explicam isto de forma muito básica, e não entram em detalhes, já que o código que carrega o driver é do tipo:
Class.forName(“com.mysql.jdbc.Driver”);
Mas o que acontece realmente aqui? Quando você utiliza o método estático Class.forName(), o Class Loader tenta inicializar esta classe. Esta classe (que é o nosso driver jdbc) possui um bloco inicializador estático (não se preocupe caso você não conheça este recurso), que irá registrar essa classe como um driver JDBC, avisando o java.sql.DriverManager, pelo método registerDriver.
Obs: Existem outras maneiras de carregar o driver, como por linha de comando (bootstrap).
Bom creio que o texto acima responde a sua dúvida, segue link com o restante do artigo.
o artigo nao explica (ou pelo menos nao entendi) pq agente nao pode fazer
Driverdriver=newDriver();
e tem que carregar em tempo de execução
errr… :roll:
Mauricio_Linhares1 like
Ora, e quem disse que não pode?
Ambos vão ter o mesmo efeito, o problema desse seu exemplo aí é que você está se amarrando diretamente ao driver do MySQL, no exemplo com o Class.forName("") o que é passado é uma String que pode ser facilmente colocada em um arquivo de configuração qualquer e alterada se for necessário.
Humbertim2
vc poderia fazer isso… se antes fizesse isto…
// imports aqui
public class ConnectionFactory {
public static Connection getConnection() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
return
DriverManager.getConnection("jdbc:mysql://localhost/bd","root","root");
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
}
public class Driver {
// a conexão com o banco de dados
private Connection connection;
public Driver() throws SQLException {
this.connection = ConnectionFactory.getConnection();
}
}
desculpe possiveis erros… tentei fazer sem consultar nada…
Foxlol
Maurício Linhares:
Ora, e quem disse que não pode?
Ambos vão ter o mesmo efeito, o problema desse seu exemplo aí é que você está se amarrando diretamente ao driver do MySQL, no exemplo com o Class.forName("") o que é passado é uma String que pode ser facilmente colocada em um arquivo de configuração qualquer e alterada se for necessário.
Muito bem colocado.
Vc poderia utilizar apenas:
newDriver();
Que iria funcionar normalmente, mas como o Maurício disse, vc ficaria amarrado ao driver do MySQL.
Como a parte de configuração do banco de dados geralmente é atrelada a arquivos properties para permitir um menor acoplamento do sistema, é aconselhável a carregar o Driver pelo Class Loader.
Abraço.
D
dh-00
Também sempre tive outra duvida.
Por que se inicio a Class.forName(""), sempre acabo tendo que usar os métodos java de sql e nao os da classe importada?
Quando tento usar por exemplo um stm do mysql, ele me diz que é incompatível.
maruero
Valew ai galera…
…sempre o forum respondendo minhas dores de cabeça!
Valew!
marcelo_mococa
Vale ressaltar que se você estiver usando JDBC 4 (Java 6), não é necessário registrar o Driver com o famoso “Class.forName”.
Se o Driver estiver no classpath, o DriverManager registra pra você.
O grande lance do Class.forName é poder trocar de um Driver para o outro sem ter de alterar o código fonte.
Com um código bem escrito, a troca de um driver para outro pode ser feita alterando apenas um parâmtero que é passado para o programa. Exemplo: um arquivo .properties.