JDBC 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
- package com.mysql.jdbc
- publicclass 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) {
- thrownew 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()
- }
- }
相關推薦
JDBC Class.forName("com.mysql.jdbc.Driver")的作用
使用JDBC時,我們都會很自然得使用下列語句: java 程式碼 Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&c
關於Class.forName(“com.mysql.jdbc.Driver”)
can new class load uid services text strac tco 傳統的使用jdbc來訪問數據庫的流程為:Class.forName(“com.mysql.jdbc.Driver”);String url = “jdbc:mysql://loca
Class.forName("com.mysql.jdbc.Driver") 是個什麼鬼?
一句話總結這行程式碼的功能:將mysql驅動註冊到DriverManager中去。 那麼為什麼可以通過這行程式碼實現註冊driver功能呢? 答: 通過呼叫這個方法,就可以將mysql的驅動driver類的class檔案載入到記憶體中; 又由於載入類檔案會執行其
為什麼需要Class.forName("com.mysql.jdbc.Driver")
在使用傳統的JDBC連線資料庫的時候,總是需要這一句(以MySQL為例): Class.forName("com.mysql.jdbc.Driver"); 以前我也沒深究,只是看網上的例子都這麼寫,實際上也跑通了,於是便懶得去管內部原理。不過大概還是清楚的,知道這句話是
Class.forName("com.mysql.jdbc.Driver");異常解決
如果您在執行java程式碼的時候出現此問題。 您是忘記匯入mysql-connector-java-5.1.18.jar這個包了。 將它放在 如果你是在執行伺服器的時候出錯。 可見,他並沒有用到 mysql-connector-java-5.1.18.jar
org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
背景: 把連線池操控資料庫的java程式做成jar包導致如下錯誤 報錯如下: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver' &
Loading class 'com.mysql.jdbc.Driver', This is deprecated. The new driver class is'com.cj.jdbc.Driv'
使用的資料庫是MySQL,驅動是6.0.6,這是由於資料庫和系統時區差異所造成的,在jdbc連線的url後面加上serverTimezone=GMT即可解決問題,如果需要使用gmt+8時區,需要寫成GMT%2B8,否則會被解析為空。再一個解決辦法就是使用低版本的MySQL jdbc驅動,5
yml中driver-class-name: com.mysql.jdbc.Driver 解析不到的問題
當在idea中使用springboot的快捷建立方式時,選中了mysql 和jdbc 那麼pom檔案中會直接有 <dependency> <groupId>mysql</groupId> <artifactId
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.
技術 loading 使用 -c drive sql mysql- 連接 不可 在連接數據庫時,使用了最新版本的mysql-Connector,所以導致老版本的“com.mysql.jdbc.Drive”不可行,要改為“com.mysql.cj.jdbc.Driver”
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is`...
springboot專案,用了最新的mysql連線驅動,報錯如下: Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj....
今天使用 mysql-8.0.13版本資料庫連結時出現了以下問題 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The
Java連線MySQL資料庫8.0以上版本遇到的坑(The new driver class is `com.mysql.cj.jdbc.Driver)
我遇到了java無法連線mysql資料庫8.0.1的問題。 報錯:Loading class `com.mysql.jdbc.Driver'. This is deprecated.
Cannot load driver class: com.mysql.jdbc.Driver錯誤記錄
報錯如下 (Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj....
今天使用 mysql-8.0.13版本資料庫連結時出現了以下問題 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Dr
SpringBoot——Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.
報錯的資訊為: 這是因為更換了最新的MySQL驅動 之前的是: jdbc.driverClass = com.mysql.dbc.Driver jdbc.url = jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&am
Sqoop: java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver
錯誤一、 Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver 解決方法: 1、將mysql的驅動包拷貝到
springboot專案報Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is`...解
參考文章:https://blog.csdn.net/qq_42815754/article/details/83652253 <!-- MySql驅動 --> <dependency> <groupId>mysql</groupId>
解決辦法 : Loading class `com.mysql.jdbc.Driver'. This is deprecated...
Loading class com.mysql.jdbc.Driver’. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver’. The driver is automatically registered
Spring Boot 出現Cannot load driver class: com.mysql.jdbc.Driver
最近將一個原先的一個小demo改為Spring Boot框架,準備執行一下專案的,但出現問題Cannot load driver class: com.mysql.jdbc.Driver 現對該問題做
Cannot load JDBC driver class 'com.mysql.jdbc.Driver '
整合spring+springmvc+mybatis的時候一直出現這個錯誤,後來經過除錯才知道,是我在config.properties檔案中多了空格在密碼以及driver=com.m