[1]在JDBC中,我们为什么要首先使用Class.forName("some driver name")加载驱动程序.为什么SUN没有在getConnection()方法本身中处理加载驱动程序.如果我将驱动程序名称作为参数传递给getConnection()方法.
[2]我想了解JBDC的内部结构.对它的任何指示都表示赞赏.
使用JDBC 4,您不再需要使用Class.forName(...),请参阅此处的一篇文章解释:
连接到数据库需要在客户端的VM中加载合适的JDBC数据库驱动程序.在JDBC的早期阶段,通常通过Class.forName()加载合适的驱动程序,传入实现JDBC驱动程序接口的类的名称.之后,DriverManager类提供了一种更灵活的方法来管理客户端应用程序中的JDBC驱动程序.要使驱动程序可用,必须使用驱动程序的类名调用DriverManager的registerDriver().或者,您可以通过jdbc.drivers系统属性指定要加载的驱动程序.当DriverManager初始化时,它会尝试加载与该属性关联的驱动程序.
JDBC 4添加了J2SE服务提供程序机制作为指定数据库驱动程序的另一种方法.为此,驱动程序JAR文件必须包含文件META-INF/services/java.sql.driver.该文件必须包含一行,其中包含JDBC驱动程序的Driver接口实现的名称.在DriverManager上调用getConnection()将加载一个如此打包的驱动程序(如果需要).加载驱动程序后,将创建一个驱动程序实例,然后调用registerDriver()以使该驱动程序可供客户端使用.
有关JDBC的更多信息,请查看Sun的JDBC链接.与其他一些规范相比,JDBC 4.0规范相对较好.