Class.forName("com.mysql.jdbc.Driver");的作用
- 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);
为什么说很自然呢,因为无论是网上还是书本教程上得例子都是这样的,而且程序也确实正常运行了,于是大家也就心安理得的找葫芦画瓢下去了。
一定要有这一句吗?不是的,我们完全可以用这样一句代替它:
- com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
- //or:
- //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中,却没有进行相应的初始化工作。
- com.mysql.jdbc.Driver driver = null;
- //or:
- 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在装载完后自动帮我们完成了这一步骤。源代码是这样的:
- package com.mysql.jdbc
- public class Driver extends NonRegisteringDriver implements java.sql.Driver {
- // ~ Static fields/initializers
- // --------------------------------------------- //
- // Register ourselves with the DriverManager
- //
- static {
- t ry {
- java.sql.DriverManager.registerDriver(new Driver());
- } catch (SQLException E) {
- throw new RuntimeException("Can't register driver!");
- }
- }
- // ~ Constructors
- // -----------------------------------------------------------
- public Driver() throws SQLException {
- // Required for Class.forName().newInstance()
- }
- }
相关推荐
mysql4.1.10的JDBC驱动<br>把它拷贝到你的web应用的WEB-INF\lib下(当然也可以设置CLASSPATH) <br><br>接着修改程序代码: <br>将你的: <br>Class.forName("org.gjt.mm.mysql.Driver").newInstance(); <br>改为: ...
Class.forName("com.mysql.cj.jdbc.Driver"); // 注册驱动 Connection conn = DriverManager.getConnection(url, username, password); System.out.println("Connected to the database!"); // 进行数据库操作.....
3. **注册驱动**:在Java代码中,使用`Class.forName("com.mysql.jdbc.Driver")`注册驱动,让JVM知道要用哪个驱动连接MySQL数据库。 4. **建立连接**:使用`java.sql.DriverManager.getConnection()`方法创建到MySQL...
在上述的JDBC示例中,我们看到`Class.forName("com.mysql.jdbc.Driver")`这行代码,其作用是加载并初始化`com.mysql.jdbc.Driver`这个数据库驱动类。在JDBC中,每个数据库驱动都会实现`java.sql.Driver`接口,并提供...
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中,`Class.forName("com.mysql.jdbc.Driver")`的作用是加载MySQL的JDBC驱动类,即`com.mysql.jdbc.Driver`。虽然看似只是加载了类,但其实这里还包含了类的初始化。 `Class.forName()`方法内部调用了本地...
在Java应用程序中,我们可以通过`Class.forName()`方法加载JDBC驱动,例如`Class.forName("com.mysql.jdbc.Driver")`。但在Servlet环境中,这个过程有所不同。由于Servlet运行在Web容器内,所以通常会通过在服务器...
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:service_name", "username", "password"); ``` 3. **DB2 JDBC驱动**:...
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...
"在 CentOS 7 中安装 Hive 1.2.2" Hive 是基于 Hadoop 的数据仓库...`<description>Driver class name for a JDBC metastore</description>` `</property>` 通过以上步骤,可以成功安装 Hive 1.2.2 在 CentOS 7 中。
<description>Driver class name for a JDBC driver.</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>Username to use against ...
这是MySQL 5.7版本以上数据库的连接驱动jar包,对应加载驱动程序代码: Class.forName("com.mysql.cj.jdbc.Driver"); 该驱动包适用于Java web开发,连接MySQL数据库时导入工程。 参考代码: Class.forName(...
<description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>username to use ...
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//服务器地址:端口/服务名", "用户名", "密码"); ``` 在实际开发中,推荐使用依赖管理工具...
<description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hivemetastore</value> <description>Username to use...
<value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost:3306/sample_db?useUnicode=true&characterEncoding=UTF-8</value> </parameter> ...
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "username", "password"); ``` 3. SQL Server:对于SQL Server,...
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.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 在前端部分,我们将使用AngularJS来处理用户界面和数据绑定。AngularJS允许我们通过双向数据绑定、指令和服务来构建动态Web应用。你可以创建一个...
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe", "username", "password"); // 使用连接进行数据库操作... conn...