關於jdbc數據庫編程連接本地數據庫的異常報錯,我找了三天才找到根本原因;現分享給各位菜鳥,少走彎路。
我在做mybatis項目整合數據庫時,運行時報錯:
看報錯原因就是數據庫驅動問題;檢查數據庫連接配置,沒有問題。
於是網上查找資料,答案都大概一樣,我試了下,還是不行。
然後我手寫一個簡單的jdbc數據庫測試本地連接,看看是否連接上:
手寫一個簡單的數據庫連接也是連接不上,總是報錯:Communications link failure;意思是:通信鏈路異常;也就是底層通信異常,然後下面又說the last package.....................;服務器沒有收到數據庫的包。
網上查找資料排查:
第一步:
1,先開mysql,輸入 show global variables like 'wait_timeout'; 這句,就會顯示出時間了,
mysql﹥ show global variables like 'wait_timeout';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| wait_timeout | 28800 |
+---------------+---------+
1 row in set (0.00 sec)
解釋:Mysql服務器默認的“wait_timeout”是8小時,也就是說一個connection空閒超過8個小時,Mysql將自動斷開該connection。這就是問題的所。將會造成上面的異常。
2 set global wait_timeout=604800;
3 set global interactive_timeout=604800;
當我輸入這些命令後,重新啓動數據庫連接,發現報錯,還是通信鏈路問題。
第二步:排查數據庫的版本號和數據庫安裝包jar包的版本號是否一致:
進入數據庫輸入命令:select version();
查看當前的數據庫版本號;數據庫版本號是8.0.15;jar包:mysql-connection-java-8.0.15-jar
兩個包也沒問題,重新測試,也報同樣的錯誤。
第三步:網上的資料查了還是沒有用,解決不了問題,很惱火,我就靜靜地想問題既然是數據庫通信鏈路異常,又顯示服務器沒有收到任何的數據庫驅動包,就說明文件沒有加載,文件沒有加載就是攔截了或者是找不到,我就把防火牆關閉掉,重新測試;結果是報錯,不是通信鏈路錯誤,心中大喜,哈哈哈,就是數據庫拒絕訪問,就說明數據庫密碼錯誤;我重新進入數據庫設置新的密碼,然後再測試,也報錯,密碼錯誤,由於我之前解決這個問題的時候,設置了很多密碼,導致密碼混淆,於是卸載數據庫,卸載數據庫要輸入命令行(見下圖)。重新下載,安裝。