使用JDBC时,我们都会很自然得使用下列语句:
java 代码
-
Class.forName("com.mysql.jdbc.Driver");
-
String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8";
-
String user = "";
-
String psw = "";
-
Connection con = DriverManager.getConnection(url,user,psw);
为什么说很自然呢,因为无论是网上还是书本教程上得例子都是这样的,而且程序也确实正常运行了,于是大家也就心安理得的找葫芦画瓢下去了。
一定要有这一句吗?不是的,我们完全可以用这样一句代替它:
java 代码
-
com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
-
-
-
String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8";
-
String user = "";
-
String psw = "";
-
Connection con = DriverManager.getConnection(url,user,psw);
-
大家可能都看出个大概来了,我们只需要在调用DriverManager的getConnection方法之前,保证相应的Driver类已经被加载到jvm中,并且完成了类的初始化工作就行了,而具体是怎样实现这个功能却是没有讲究的。上面两种方法都可以实现这个功能,因此程序可以正常运行。注意了,如果我们进行如下操作,程序是不能正常运行的,因为这样仅仅使Driver类被装载到jvm中,却没有进行相应的初始化工作。
java 代码
-
com.mysql.jdbc.Driver driver = null;
-
-
ClassLoader cl = new ClassLoader();
-
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 代码
-
package com.mysql.jdbc
-
-
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
-
-
static {
-
t ry {
-
java.sql.DriverManager.registerDriver(new Driver());
-
} catch (SQLException E) {
-
throw new RuntimeException("Can't register driver!");
-
}
-
}
-
-
}
分享到:
相关推荐
在上述的JDBC示例中,我们看到`Class.forName("com.mysql.jdbc.Driver")`这行代码,其作用是加载并初始化`com.mysql.jdbc.Driver`这个数据库驱动类。在JDBC中,每个数据库驱动都会实现`java.sql.Driver`接口,并提供...
`Class.forName()`经常用于配置文件或者数据库驱动加载等场景,因为这些情况需要在程序运行时才知道要加载的具体类。 总结一下,这三个概念在Java开发中扮演着不同的角色: 1. Class literal (`ClassName.class`) ...
//加载数据库驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //数据库连接url String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; //数据库...
//加载数据库驱动 Class.forName("org.sqlite.JDBC"); //获取数据库连接 conn = DriverManager.getConnection(url); LoggerHelper.info("Database connection successful"); }catch (ClassNotFoundException |...
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("加载驱动成功!"); }catch(Exception e) { e.printStackTrace(); System.out.println("加载驱动失败!"); } try...
使用这些驱动时,开发者首先需要在项目中添加对应的jar文件,然后可以通过`Class.forName()`方法加载驱动,接着创建`Connection`对象来建立数据库连接。例如: ```java Class.forName("com.mysql.jdbc.Driver"); //...
3. 在Java代码中,通过`Class.forName()`方法加载JDBC驱动,例如:`Class.forName("com.shentong.jdbc.Driver")`,这里的"com.shentong.jdbc.Driver"应替换为实际的驱动类名。 4. 使用`DriverManager.getConnection...
这是MySQL 5.7版本以上数据库的连接驱动jar包,对应加载驱动程序代码: Class.forName("com.mysql.cj.jdbc.Driver"); 该驱动包适用于Java web开发,连接MySQL数据库时导入工程。 参考代码: Class.forName(...
在Java编程语言中,`Class.forName()`方法是一个非常重要的功能,它主要用于动态加载类到Java虚拟机(JVM)中。这个方法的主要作用是根据给定的全限定类名(包括包名和类名)来查找并加载对应的类。下面我们将深入...
- **Class.forName()**:加载指定的JDBC驱动类。 - **newInstance()**:创建一个实例对象。 - **getConnection()**:使用URL、用户名和密码获取数据库连接。 - **URL格式**:`jdbc:oracle:thin:@主机地址:端口号:...
在Java编程中,`Class.forName()`, `newInstance()` 和 `new` 关键字都是与对象创建和类加载紧密相关的概念,但它们各自有着不同的用途和限制。 首先,`Class.forName("className")` 是一个静态方法,它用于在运行...
2. **加载驱动程序**:在使用JDBC之前,需要加载对应的数据库驱动。这通常通过调用`Class.forName()`方法实现。 3. **建立连接**:通过`DriverManager.getConnection()`方法获取数据库连接。 4. **执行SQL语句**:...
例如,通过`Class.forName()`加载驱动,`Connection conn = DriverManager.getConnection(url, username, password)`建立连接,`Statement stmt = conn.createStatement()`创建Statement对象,以及`ResultSet rs = ...
在建立连接时,首先需要通过`Class.forName(Driver)`方法加载驱动,然后通过`DriverManager.getConnection()`方法建立数据库连接。URL参数通常为`jdbc:mysql://localhost:3306/db_name`,其中`db_name`应替换为实际...
在上下文中,`Class.forName()` 被用来加载数据库驱动,比如MySQL的`com.mysql.jdbc.Driver` 类。当我们连接到数据库时,必须确保对应的数据库驱动已经被加载到Java虚拟机(JVM)中,以便能够正确地与数据库进行通信...
### Java中数据库驱动程序加载及建立连接代码 在Java编程中,通过JDBC(Java Database Connectivity)技术可以实现与各种数据库的交互。JDBC提供了一种标准接口来访问关系型数据库,它允许开发者使用标准的Java API...
在这个例子中,`Class.forName()`方法用于加载神通数据库的JDBC驱动,而`DriverManager.getConnection()`则用于创建数据库连接。这里的URL格式应根据实际数据库的设置进行调整,包括主机地址、端口号以及数据库名称...
- 加载驱动:使用`Class.forName()`方法加载驱动类,例如`Class.forName("com.mysql.jdbc.Driver")`。这个方法会确保JVM能够找到并初始化指定的类,使得后续的数据库连接成为可能。 - 获取连接:使用`...
### JDBC数据库连接大全 #### 一、概述 JDBC(Java Database Connectivity)是Java平台用于...此外,还应注意不同数据库驱动的具体版本可能有所不同,因此在实际开发过程中应根据所使用的数据库版本选择合适的驱动。
在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一组接口和类。当我们使用JDBC操作MySQL...然而,对于较旧的项目或较低版本的JDBC,仍然需要使用`Class.forName()`的方式来加载驱动。