`
smallpaopao
  • 浏览: 18152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

<转>Class.forName("com.mysql.jdbc.Driver");的作用

 
阅读更多

Class.forName("com.mysql.jdbc.Driver");的作用

 
使用JDBC时,我们都会很自然得使用下列语句:
java 代码
  1. Class.forName("com.mysql.jdbc.Driver");   
  2. String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8";   
  3. String user = "";   
  4. String psw = "";   
  5. Connection con = DriverManager.getConnection(url,user,psw);  


    为什么说很自然呢,因为无论是网上还是书本教程上得例子都是这样的,而且程序也确实正常运行了,于是大家也就心安理得的找葫芦画瓢下去了。
    一定要有这一句吗?不是的,我们完全可以用这样一句代替它:

java 代码
  1. com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();   
  2. //or:   
  3. //new com.mysql.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 = DriverManager.getConnection(url,user,psw);   
  8.   

    大家可能都看出个大概来了,我们只需要在调用DriverManager的getConnection方法之前,保证相应的Driver类已经被加载到 jvm中,并且完成了类的初始化工作就行了,而具体是怎样实现这个功能却是没有讲究的。上面两种方法都可以实现这个功能,因此程序可以正常运行。注意了,如果我们进行如下操作,程序是不能正常运行的,因为这样仅仅使Driver类被装载到jvm中,却没有进行相应的初始化工作。

java 代码
  1. com.mysql.jdbc.Driver driver = null;   
  2. //or:   
  3. ClassLoader cl = new ClassLoader();   
  4. cl.loadClass("com.mysql.jdbc.Driver");  


     我们都知道JDBC是使用Bridge模式进行设计的,DriverManager就是其中的Abstraction,java.sql.Driver是 Implementor,com.mysql.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
哦,原来是com.mysql.jdbc.Driver在装载完后自动帮我们完成了这一步骤。源代码是这样的:

java 代码
  1. package com.mysql.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.sql.DriverManager.registerDriver(new Driver());   
  11.            } catch (SQLException E) {   
  12.               throw new RuntimeException("Can't register driver!");   
  13.            }   
  14.    }   
  15. // ~ Constructors   
  16. // -----------------------------------------------------------   
  17.   
  18. public Driver() throws SQLException {   
  19.      // Required for Class.forName().newInstance()   
  20. }   
  21. }  

 

分享到:
评论

相关推荐

    mysql-connector-java-3.0.14-production-bin.jar

    mysql4.1.10的JDBC驱动&lt;br&gt;把它拷贝到你的web应用的WEB-INF\lib下(当然也可以设置CLASSPATH) &lt;br&gt;&lt;br&gt;接着修改程序代码: &lt;br&gt;将你的: &lt;br&gt;Class.forName("org.gjt.mm.mysql.Driver").newInstance(); &lt;br&gt;改为: ...

    com.mysql.cj.jdbc.driver驱动下载

    Class.forName("com.mysql.cj.jdbc.Driver"); // 注册驱动 Connection conn = DriverManager.getConnection(url, username, password); System.out.println("Connected to the database!"); // 进行数据库操作.....

    com.mysql.jdbc.Driver驱动包工具

    3. **注册驱动**:在Java代码中,使用`Class.forName("com.mysql.jdbc.Driver")`注册驱动,让JVM知道要用哪个驱动连接MySQL数据库。 4. **建立连接**:使用`java.sql.DriverManager.getConnection()`方法创建到MySQL...

    java中Class.forName方法的作用详解

    在上述的JDBC示例中,我们看到`Class.forName("com.mysql.jdbc.Driver")`这行代码,其作用是加载并初始化`com.mysql.jdbc.Driver`这个数据库驱动类。在JDBC中,每个数据库驱动都会实现`java.sql.Driver`接口,并提供...

    com.mysql.cj.jdbc.Driver.zip

    Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); ``` 3. **`mysql-connector-java-8.0.27....

    浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")

    在JDBC中,`Class.forName("com.mysql.jdbc.Driver")`的作用是加载MySQL的JDBC驱动类,即`com.mysql.jdbc.Driver`。虽然看似只是加载了类,但其实这里还包含了类的初始化。 `Class.forName()`方法内部调用了本地...

    javaservlet连接mysql数据库.pdf

    在Java应用程序中,我们可以通过`Class.forName()`方法加载JDBC驱动,例如`Class.forName("com.mysql.jdbc.Driver")`。但在Servlet环境中,这个过程有所不同。由于Servlet运行在Web容器内,所以通常会通过在服务器...

    jdbc数据库连接所需的jar包驱动、mysql、oracle、db2

    Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:service_name", "username", "password"); ``` 3. **DB2 JDBC驱动**:...

    SpringBoot+Mybatis-Plus整合Sharding-JDBC5.1.1实现单库分表【全网最新】.doc

    driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db?serverTimezone=UTC&useSSL=false username: root password: 123456 sharding: tables: t_user: actual-data-nodes...

    在CentOS7中安装Hive1.2.2

    "在 CentOS 7 中安装 Hive 1.2.2" Hive 是基于 Hadoop 的数据仓库...`&lt;description&gt;Driver class name for a JDBC metastore&lt;/description&gt;` `&lt;/property&gt;` 通过以上步骤,可以成功安装 Hive 1.2.2 在 CentOS 7 中。

    mysql-connector-java-5.1.42.jar

    &lt;description&gt;Driver class name for a JDBC driver.&lt;/description&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;javax.jdo.option.ConnectionUserName&lt;/name&gt; &lt;value&gt;root&lt;/value&gt; &lt;description&gt;Username to use against ...

    MySQL 5.7版本以上数据库的连接驱动jar包

    这是MySQL 5.7版本以上数据库的连接驱动jar包,对应加载驱动程序代码: Class.forName("com.mysql.cj.jdbc.Driver"); 该驱动包适用于Java web开发,连接MySQL数据库时导入工程。 参考代码: Class.forName(...

    hivesql语句练习

    &lt;description&gt;Driver class name for a JDBC metastore&lt;/description&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;javax.jdo.option.ConnectionUserName&lt;/name&gt; &lt;value&gt;root&lt;/value&gt; &lt;description&gt;username to use ...

    Java常用数据库驱动,SQLServer、mysql、Oracle驱动

    Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//服务器地址:端口/服务名", "用户名", "密码"); ``` 在实际开发中,推荐使用依赖管理工具...

    HIVE 0.12安装配置(HADOOP2.2)

    &lt;description&gt;Driver class name for a JDBC metastore&lt;/description&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;javax.jdo.option.ConnectionUserName&lt;/name&gt; &lt;value&gt;hivemetastore&lt;/value&gt; &lt;description&gt;Username to use...

    javaservlet连接mysql数据库借鉴.pdf

    &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt; &lt;/parameter&gt; &lt;parameter&gt; &lt;name&gt;url&lt;/name&gt; &lt;value&gt;jdbc:mysql://localhost:3306/sample_db?useUnicode=true&amp;characterEncoding=UTF-8&lt;/value&gt; &lt;/parameter&gt; ...

    java常用链接数据库驱动包

    Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "username", "password"); ``` 3. SQL Server:对于SQL Server,...

    jdbc驱动程序实例

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl为数据库的SID String user = "test"; String password = "test"; Connection ...

    玩转spring boot 结合AngularJs和JDBC(4)

    spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 在前端部分,我们将使用AngularJS来处理用户界面和数据绑定。AngularJS允许我们通过双向数据绑定、指令和服务来构建动态Web应用。你可以创建一个...

    mysql,mssql,oracalclasses12驱动

    Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe", "username", "password"); // 使用连接进行数据库操作... conn...

Global site tag (gtag.js) - Google Analytics