JDBC驱动的调用有两步:
第一步:
     Class.forName( "com.mysql.jdbc.Driver" );   //以mysql为例第二步:
     Connection c = 
           DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root" );问题是,为什么第一步要生成一个MySql驱动程序Driver类对应的Class对象,既然Driver已经在classpath路径下了,第二步中getConnection为什么找不到Driver类?

解决方案 »

  1.   

    这个是JDBC的规范。当调用第一步的时候,根据规则这个Driver类在自己的静态方法中(即一旦被JVM加载就会执行的代码)必须向DriverManager注册自己这样第二步才可以成功,因为DriverManager怎么可能会知道jdbc:mysql://...这样的URL需要com.mysql.jdbc.Driver类呢?其实DriverManager是会向已经注册的所有Driver问一次 acceptURL,只有com.mysql.jdbc.Driver会接受上述的URL而在你没有调用第一步时,com.mysql.jdbc.Driver还没有注册,DriverManager根本不知道应该调用哪个Driver类去进行连接
    在ClassPath中并不等于JVM可以知道调用哪个类,这个就是需要两步的原因