JDBC連接數(shù)據(jù)庫時(shí)出現(xiàn)的常見錯(cuò)誤解決辦法
技術(shù)更新往往是比較快的,最近在學(xué)習(xí)JDBC時(shí)就因?yàn)閷W(xué)習(xí)資料比較舊導(dǎo)致出了不少小問題,我使用的mysql版本是8.0.x,mysql-connector版本8.0.x
應(yīng)該改為Class.forName("com.mysql.cj.jdbc.Driver");新版本,系統(tǒng)可以自動加載,不用書寫也可以
老版本url="
jdbc:mysql://localhost:3306/databaseName"
新版本url="
jdbc:mysql://localhost:3306/databaseName?serverTimezone=GMT"這是對時(shí)區(qū)的設(shè)置,不設(shè)置就拋錯(cuò),同時(shí)這種寫法會有警告,是要求你主動設(shè)置是否進(jìn)行加密校驗(yàn),即useSSL=false或者useSSL=true //url中的?之后的是屬性設(shè)置
推薦url="
jdbc:mysql://localhost:3306/databaseName?useSSL=false&serverTimezone=GMT"
練習(xí)時(shí)寫了一個(gè)程序拋出這個(gè)錯(cuò)誤,錯(cuò)誤指向url那一行,仔細(xì)與之前程序的程序?qū)Ρ劝l(fā)現(xiàn)沒錯(cuò),而且執(zhí)行之前的程序也同樣拋出了這個(gè)錯(cuò),網(wǎng)上搜索有在url中添加屬性allowPublicKeyRetrieval=true,運(yùn)行后確實(shí)可行,但并不能解釋我之前程序可以運(yùn)行的程序?yàn)槭裁赐蝗粓?bào)錯(cuò)。后來發(fā)現(xiàn)是新版本中ResultSet默認(rèn)是不可滾動的(行指針只可以用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錯(cuò)誤
下一篇:Linux環(huán)境中Oracle數(shù)據(jù)庫ORA