`
lpm528
  • 浏览: 84138 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

加载数据库驱动Class.forName

    博客分类:
  • java
 
阅读更多

 使用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.  
  5.  static {   
  6.     t ry {   
  7.               java.sql.DriverManager.registerDriver(new Driver());   
  8.           } catch (SQLException E) {   
  9.               throw new RuntimeException("Can't register driver!");   
  10.           }   
  11.   }   
  12.  
  13. }  
分享到:
评论

相关推荐

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

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

    class literal & instance.getClass() & Class.forName(String className)

    `Class.forName()`经常用于配置文件或者数据库驱动加载等场景,因为这些情况需要在程序运行时才知道要加载的具体类。 总结一下,这三个概念在Java开发中扮演着不同的角色: 1. Class literal (`ClassName.class`) ...

    Javabean封装数据库

    //加载数据库驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //数据库连接url String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; //数据库...

    storage.db

    //加载数据库驱动 Class.forName("org.sqlite.JDBC"); //获取数据库连接 conn = DriverManager.getConnection(url); LoggerHelper.info("Database connection successful"); }catch (ClassNotFoundException |...

    数据库驱动包.rar

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("加载驱动成功!"); }catch(Exception e) { e.printStackTrace(); System.out.println("加载驱动失败!"); } try...

    数据库驱动jar.rar

    使用这些驱动时,开发者首先需要在项目中添加对应的jar文件,然后可以通过`Class.forName()`方法加载驱动,接着创建`Connection`对象来建立数据库连接。例如: ```java Class.forName("com.mysql.jdbc.Driver"); //...

    神通数据库驱动oscar.rar

    3. 在Java代码中,通过`Class.forName()`方法加载JDBC驱动,例如:`Class.forName("com.shentong.jdbc.Driver")`,这里的"com.shentong.jdbc.Driver"应替换为实际的驱动类名。 4. 使用`DriverManager.getConnection...

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

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

    java中Class.forName的作用浅谈

    在Java编程语言中,`Class.forName()`方法是一个非常重要的功能,它主要用于动态加载类到Java虚拟机(JVM)中。这个方法的主要作用是根据给定的全限定类名(包括包名和类名)来查找并加载对应的类。下面我们将深入...

    java于各种数据库连接额语句

    - **Class.forName()**:加载指定的JDBC驱动类。 - **newInstance()**:创建一个实例对象。 - **getConnection()**:使用URL、用户名和密码获取数据库连接。 - **URL格式**:`jdbc:oracle:thin:@主机地址:端口号:...

    Class.forName()_newInstance()_New_三者区别

    在Java编程中,`Class.forName()`, `newInstance()` 和 `new` 关键字都是与对象创建和类加载紧密相关的概念,但它们各自有着不同的用途和限制。 首先,`Class.forName("className")` 是一个静态方法,它用于在运行...

    java 中连数据库的语法.doc

    2. **加载驱动程序**:在使用JDBC之前,需要加载对应的数据库驱动。这通常通过调用`Class.forName()`方法实现。 3. **建立连接**:通过`DriverManager.getConnection()`方法获取数据库连接。 4. **执行SQL语句**:...

    gbase数据库驱动jar.zip

    例如,通过`Class.forName()`加载驱动,`Connection conn = DriverManager.getConnection(url, username, password)`建立连接,`Statement stmt = conn.createStatement()`创建Statement对象,以及`ResultSet rs = ...

    java连接数据库驱动加载

    在建立连接时,首先需要通过`Class.forName(Driver)`方法加载驱动,然后通过`DriverManager.getConnection()`方法建立数据库连接。URL参数通常为`jdbc:mysql://localhost:3306/db_name`,其中`db_name`应替换为实际...

    jdbc中class.forname的作用

    在上下文中,`Class.forName()` 被用来加载数据库驱动,比如MySQL的`com.mysql.jdbc.Driver` 类。当我们连接到数据库时,必须确保对应的数据库驱动已经被加载到Java虚拟机(JVM)中,以便能够正确地与数据库进行通信...

    Java中数据库驱动程序加载及建立连接代码

    ### Java中数据库驱动程序加载及建立连接代码 在Java编程中,通过JDBC(Java Database Connectivity)技术可以实现与各种数据库的交互。JDBC提供了一种标准接口来访问关系型数据库,它允许开发者使用标准的Java API...

    神通数据库java连接驱动.zip

    在这个例子中,`Class.forName()`方法用于加载神通数据库的JDBC驱动,而`DriverManager.getConnection()`则用于创建数据库连接。这里的URL格式应根据实际数据库的设置进行调整,包括主机地址、端口号以及数据库名称...

    数据库连接驱动.docx

    - 加载驱动:使用`Class.forName()`方法加载驱动类,例如`Class.forName("com.mysql.jdbc.Driver")`。这个方法会确保JVM能够找到并初始化指定的类,使得后续的数据库连接成为可能。 - 获取连接:使用`...

    jdbc数据库连接大全.txt

    ### JDBC数据库连接大全 #### 一、概述 JDBC(Java Database Connectivity)是Java平台用于...此外,还应注意不同数据库驱动的具体版本可能有所不同,因此在实际开发过程中应根据所使用的数据库版本选择合适的驱动。

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

    在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一组接口和类。当我们使用JDBC操作MySQL...然而,对于较旧的项目或较低版本的JDBC,仍然需要使用`Class.forName()`的方式来加载驱动。

Global site tag (gtag.js) - Google Analytics