JDBC連接數(shù)據(jù)庫時出現(xiàn)的常見錯誤解決辦法
技術更新往往是比較快的,最近在學習JDBC時就因為學習資料比較舊導致出了不少小問題,我使用的mysql版本是8.0.x,mysql-connector版本8.0.x
應該改為Class.forName("com.mysql.cj.jdbc.Driver");新版本,系統(tǒng)可以自動加載,不用書寫也可以
老版本url="
jdbc:mysql://localhost:3306/databaseName"
新版本url="
jdbc:mysql://localhost:3306/databaseName?serverTimezone=GMT"這是對時區(qū)的設置,不設置就拋錯,同時這種寫法會有警告,是要求你主動設置是否進行加密校驗,即useSSL=false或者useSSL=true //url中的?之后的是屬性設置
推薦url="
jdbc:mysql://localhost:3306/databaseName?useSSL=false&serverTimezone=GMT"
練習時寫了一個程序拋出這個錯誤,錯誤指向url那一行,仔細與之前程序的程序對比發(fā)現(xiàn)沒錯,而且執(zhí)行之前的程序也同樣拋出了這個錯,網(wǎng)上搜索有在url中添加屬性allowPublicKeyRetrieval=true,運行后確實可行,但并不能解釋我之前程序可以運行的程序為什么突然報錯。后來發(fā)現(xiàn)是新版本中ResultSet默認是不可滾動的(行指針只可以用next()方法),而你可能使用了可滾動ResultSet的方法,如isFirst(),isLast(),previous(),relative(),absolute()方法
解決辦法:要么不用這些方法,要么選擇createStatement(int resultSetType, int resultSetConcurrency)方法而不是createStatement()方法,至于具體參數(shù)可以查APIClass.forName("com.mysql.jdbc.Driver");老版本DriverManager.getConnection(url, userName,password);中 Public Key Retrieval is not allowed錯誤
下一篇:Linux環(huán)境中Oracle數(shù)據(jù)庫ORA