使用JDBC連接數據庫的一些BUG


題記:前幾天用JDBC連接MYSQL數據庫的時候,出現了一些BUG,針對於代碼和設置方面進行問題的解決。

一、出現:遠程mysql_java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect

  很明顯的意思就是當前數據庫不允許我們進行遠程連接。

  遠程的機器B不允許機器A訪問他的數據庫。也就是說,我們要解決這個問題,就是要讓機器B的數據庫允許機器A訪問,就搞定啦;

  立刻到cmd窗口中使用 >mysql -uroot  -proot -h192.168.1.88 -P3306 -Ddb10來連接服務器會顯示錯誤,說明確實是無法通過遠程連接到數據庫的。

  【當初設置的時候沒有保存截圖,這里就沒有放圖了,但是有Err的明星錯誤的】

  注意:前提是使用  >mysql -uroot -proot   這條指令是可以連接到數據庫的,不然就是你的環境變量或者是數據庫的安裝有問題了。MYSQL的安裝請點擊

  如下

                                                                                

  當進入到這個界面我們就可以進行對應的解決方案了

  1.   第一步:輸入  use mysql
  2.   第二步:輸入 show tables;

                                                                                  

  再輸入相關指令:

  •   第一步:select host from user;
  •   第二步:update user set host ='%' where user='root';
  •   第三步:select host form user;   [檢查一下是否更新成功]

                                                                                             

 

  然后進入計算機的服務界面,重新啟動MYSQL的服務就可以了。

                                                          

  再去cmd窗口使用遠程連接,進入mysql目錄就可以成功了。

                                                         

小結:當時整數據庫的時候全部用了開發工具,也沒有注意到該數據庫是否允許遠程連接的,一直都是進行本地連接,

      直到后面使用JDBC來連接數據庫進行操作的時候才發現這個原因

二、Exception in thread "main" java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0

  上面這個錯誤是因為導入的用來連接的jar包和我們當前項目的jdk版本是不一樣的,導致版本不一致而出錯了

                                                    

出現問題原因-----分析 JDK版本不一致的問題 }

  •   在eclipse中開發的項目有個Java build path中可以配置的JDK
  •   java compiler中可以配置compiler level{eclipse>windows>preferences>java>compiler>compiler compliance level}

區別

  •   build path的JDK版本是你開發的時候編譯器需要使用到的,就是你在eclipse中開發代碼,給你提示報錯的,編譯的過程;
  •   java compiler compliance level中配置的編譯版本號,這個編譯版本號的作用是,你這個項目將來開發完畢之后,要放到服務器上運行,那個服務器上JDK的運行版本。

  問題就是,build path中配置1.7的JDK,java compiler compliance level中配置的1.7,但是程序運行需要的是1.8的JDK,就報了那個錯誤。

  在eclipse中進行開發的時候,build path 中JDK進行類庫的編譯(就是你使用類在不在這個JDK中),

  java compiler compliance level是對這個項目語法的編譯(就是你的項目中語法的正確與否),在開發的過程中,這兩個地方是都起作用的。

總結:build path 和 java complier compliance level和服務器配置的JDK保持一致,就不會出現任何問題的

 

  這個問題的解決方法也是很簡單的,首先去查看自己的導入的jar包是在哪個jdk版本下面運行的,然后再更改我們項目的jdk版本號,或者是換用和我們一樣版本號的jar包就可以解決了,

  這里我導入的是在jdk8上運行的jar包,所以我將我的項目改為jdk8的,

  查看我的項目目前的版本是:1.7的

                                                                                           

第一步、

                                                          

第二步、

                                                      

第三步、

                                     

這個時候再查看我們的項目JDK版本是1.8的了。

 

3、上面是解決了由於版本不一致的情況,但是當我運行的時候,會報下面的錯誤:  

  Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and

  manual loading of the driver class is generally unnecessary.

                     

  這個就很簡單了,白問翻譯過來都知道了,就是要換用新的類了,將使用com.mysql.jdbc.Drive的換為com.mysql.cj.jdbc.Driver即可,這是由於我當前使用的是最新的jdbc驅動包,里面的API有跟新了

4、當我把API換為新的了,但是運行的時候又出錯了,這回的錯是:

  Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone.

  You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

                     

  仔細閱讀,發現是與時間設置相關,仔細研究后發現,是因為新版的Mysql中的時區默認設置與本地時區之間是不同的,因此會報錯。

  解決方法即為修改時區設置即可,可以在連接數據庫的url的最后添加這樣一段代碼 ?serverTimezone=UTC ,就可以解決問題了。

  事例:

  原來報錯的:String url = "jdbc:mysql://176.129.8.53:3306/db10";

  改正后的:String url = "jdbc:mysql://176.129.8.53:3306/db10?serverTimezone=UTC"; 

總結:

這是對使用MYSQL的JDBC驅動包進行數據庫的操作的時候總結出來的一些解決方案,

然后分享出來自己當時的一步一步的解決步驟,肯定是不全的,但是就目前而言是可以解決一大部分的錯誤的了。

 

                                                                                                                            2019-03-09 13:46:08


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM