JDBC Class.forName() pq?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
maruero
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

É vc não está vendo errado! É mais um perguntando sobre o porque de se usar Class.forName( ).

Mas minha pergunta é por que eu tenho que fazer isso?


E não posso instanciar um objeto do tipo com.mysql.jdbc.Driver?



Eu queria esclarecer essa idéia......se for uma explicação lá de baixo mesmo (a base da coisa mesmo), é ainda melhor.

Desde já agradeço.
rodrigo_corinthians
JavaEvangelist
[Avatar]
Membro desde: 07/06/2005 12:01:01
Mensagens: 316
Offline

Essa sua dúvida é bastante interessante...

Paulo Silveira escreveu...
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.

http://www.guj.com.br/java.tutorial.artigo.7.1.guj
Henrik
JavaChild

Membro desde: 26/03/2006 22:06:12
Mensagens: 100
Offline

eu sempre tive essa duvida...

o artigo nao explica (ou pelo menos nao entendi) pq agente nao pode fazer


e tem que carregar em tempo de execução

errr...

This message was edited 1 time. Last update was at 09/09/2007 21:46:28

Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

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.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
Humbertim2
JavaChild
[Avatar]

Membro desde: 31/01/2007 22:04:03
Mensagens: 115
Localização: São Paulo
Offline

vc poderia fazer isso... se antes fizesse isto...





desculpe possiveis erros... tentei fazer sem consultar nada...

This message was edited 1 time. Last update was at 10/09/2007 00:10:23


A modéstia, quando excessiva, é como o vento que apaga o archote cegando o viadante nas trevas de uma noite interminável.
Para que possa o homem vencer os múltiplos obstáculos que se lhe deparam na vida, precisa ter o espírito preso às raízes de uma ambição que o impulsione a um ideal qualquer.

O homem que calculava
[Email] [MSN]
Foxlol
Virtual Machine Man
[Avatar]

Membro desde: 02/05/2006 10:17:47
Mensagens: 646
Localização: São José do Rio Pardo - SP
Offline

Maurício Linhares wrote: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:


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.

Sun Certified Java Programmer
Sun Certified Web Component Developer
Java EE 5 Business Component Developer Oracle Certified Professional
[MSN] [ICQ]
dh-00
HelloWorld

Membro desde: 17/08/2006 16:16:52
Mensagens: 14
Offline

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
JavaTeenager
[Avatar]

Membro desde: 21/08/2006 12:01:38
Mensagens: 174
Localização: Barueri
Offline

Valew ai galera........

......sempre o forum respondendo minhas dores de cabeça!

Valew!
marcelo_mococa
Virtual Machine Man
[Avatar]

Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline

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

e viva o Java 6

This message was edited 1 time. Last update was at 11/09/2007 10:47:17


Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog

saulocamposi
Entusiasta Java

Membro desde: 11/09/2007 09:30:53
Mensagens: 20
Offline

eu aprendi de duas formas com o:

Class.forName("com.mysql.jdbc.Driver");

e dessa forma:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());
connection = DriverManager.getConnection("jdbc:mysql://"+host+"/"+database,user, password);


me disseram que essa última era melhor e mais nova
fvslistas
JavaGuru

Membro desde: 26/08/2009 17:31:26
Mensagens: 231
Offline

Não é nova não.
Está lá desde o 1.4
http://java.sun.com/j2se/1.4.2/docs/api/index.html


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.
Ravnus
JavaBaby
[Avatar]

Membro desde: 22/10/2010 10:55:56
Mensagens: 83
Localização: Brasília, DF
Offline

.........................................................

This message was edited 7 times. Last update was at 19/05/2012 11:08:43


Domício Medeiros

Usuário Linux
[Email] [MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team