Como amostrado nas páginas dos enhancements do Java SE 6, o Mustang segue as especificações da JDBC 4.0. Segundo esta, o uso do Class.forName() para carregar um determinado driver para a conexão com o banco não deveria mais ser necessário.
Tenho aqui instalado o JDK 1.6_02 com JRE de mesma versão e estou tentando rodar uma classe que acessa o MySQL instalado no próprio PC, portanto, localhost:3306. Tentei não colocar o Class.forName(), mas ocorreu o conhecido erro no suitable driver….
Eu gostari de saber: como funciona afinal o esquema de não explicitar a classe de Driver? Neste artigo, pelo que entendi, só não é necessário especificar o Driver se este fora especificado anteriormente no mesmo ClassLoader; mas acho que entendi errado.
Para você não precisar carregar explicitamente o driver usando “Class.forName”, as seguintes condições devem ser satisfeitas:
a) O driver deve seguir a especificação JDBC 4.0 (pode ser que seu driver não siga essa especificação)
b) Você tem de especificar o nome da(s) classe(s) do(s) driver(s) na “System property” jdbc.drivers. Exemplo:
Ou seja, você trocou 6 por um valor menor que meia-dúzia (já que você tem de passar o tal nome por linha de comando, e ter de usar um driver JDBC 4.0). Melhor continuar a usar Class.forName.
estranho, lendo a documentação não me pareceu necessário o uso do -Djdbc.drivers, pois pelo que etendi o driver teria que estar no classpath e dentro do jar do driver teria o arquivo META-INF/services/java.sql.Driver que informaria qual a classe do driver. Realmente se é necessário o uso do -D fica totalmente inútil esta “funcionalidade”.