isterDriver(sql.jdbc.Driver());
缺点:由sql.jdbc.Driver()可以知道,这里需要创建一个类的实例。创建类的实例就需要在java文件中将该类通过import导入,否则就会报错,即采用这种方式,程序在编译的时候不能脱离驱动类包,为程序切换到其他数据库带来麻烦。实际上这个地方还做了一次无用功,Driver类中本身已经含有静态块将instance放入驱动列表中。(详细说明可以参照mysql的Driver类)
public class Driver extends NonRegisteringDriver implements java.sql.Driver {  // ~ Static fields/initializers  // ---------------------------------------------  //  // Register ourselves with the DriverManager  //  static {  try {  java.isterDriver(new Driver());  } catch (SQLException E) {  throw new RuntimeException("Can't register driver!");  }  }  // ~ Constructors  // -----------------------------------------------------------  /**  * Construct a new driver and register it with DriverManager  *  * @throws SQLException  *            if a database error occurs.  */  public Driver() throws SQLException {  // Required for Class.forName().newInstance()  } }
由上可见,在创建Driver类的时候,其实已经调用一次registerDriver方法了、
2,System.setProperty(”jdbc.drivers“,”sql.jdbc.Driver“);
可以脱离驱动包编译,可以同时设置多个驱动,多个驱动之间使用冒号分隔。
3,Class.forName(“sql.jdbc.Driver”);
=================================================================================
使用JDBC时,我们都会很自然得使用下列语句:
java 代码
1.Class.forName("sql.jdbc.Driver"); 
2.String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8"; 
3.String user = ""; 
4.String psw = ""; 
java的jdbc连接数据库
5.Connection con = Connection(url,user,psw); 
为什么说很自然呢,因为无论是网上还是书本教程上得例子都是这样的,而且程序也确实正常运行了,于是大家也就心安理得的葫芦画瓢下去了。
一定要有这一句吗?不是的,我们完全可以用这样一句代替它:
java 代码
2.//or:   
3.//sql.jdbc.Driver();   
4.String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8";   
5.String user = "";   
6.String psw = "";   
7.Connection con = Connection(url,user,psw);   
8. 
大家可能都看出个大概来了,我们只需要在调用DriverManager的getConnection方法之前,保证相应的Driver类已经被加载到jvm中,并且完成了类的初始化工作就行了,而具体是怎样实现这个功能却是没有讲究的。上面两种方法都可以实现这个功能,因此程序可以正常
运行。注意了,如果我们进行如下操作,程序是不能正常运行的,因为这样仅仅使Driver类被装载到jvm中,却没有进行相应的初始化工作。
java 代码
2.//or:   
3.ClassLoader cl = new ClassLoader();    ====================错误
4.cl.loadClass("sql.jdbc.Driver"); 
我们都知道JDBC是使用Bridge模式进行设计的,DriverManager就是其中的Abstraction,java.sql.Driver是Implementor,sql.jdbc.Driver是Implementor的一个具体实现(请参考GOF的Bridge模式的描述)。大家注意了,前一个Driver是一个接口,后者却是一个类,它实现了前面的Driver接口。
Bridge模式中,Abstraction(DriverManager)是要拥有一个Implementor(Driver)的引用的,但是我们在使用过程中,并没有将Driver对象注册到DriverManager中去啊,这是怎么回事呢?jdk文档对Driver的描述中有这么一句:
When a Driver class is loaded, it should create an instance of itself and register it with the DriverManager
哦,原来是sql.jdbc.Driver在装载完后自动帮我们完成了这一步骤。源代码是这样的:
java 代码
1.sql.jdbc   
2. 
3.public class Driver extends NonRegisteringDriver implements java.sql.Driver {   
4. // ~ Static fields/initializers   
5. // --------------------------------------------- //   
6. // Register ourselves with the DriverManager   
7. //   
8. static {   
9.    t ry {   
10.              java.isterDriver(new Driver());   
11.          } catch (SQLException E) {   
12.              throw new RuntimeException("Can't register driver!");   
13.          }   
14.  }   
15.// ~ Constructors   
16. // -----------------------------------------------------------   
17./** 
18.  * Construct a new driver and register it with DriverManager 
19.  *   
20.  * @throws SQLException 
21.  *            if a database error occurs. 
22.  */ 
23. public Driver() throws SQLException {   
24.    // Required for Class.forName().newInstance()   
25. }   
26.} 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。