代碼生成器在mysql版本的不同,使用會產生不同的bug
由于其他百度搜索到很多資料都是在解決訪問的url進行添加文字,解決了很長時間都沒解決,最后發現本質問題出在mysql版本上,
特此記錄下相關方法,也希望幫助遇到類似錯誤,而急需解決程式員
注:本人的系統安裝的是mysql8.0.x的,代碼生成器提供的是5.1.x的,切換就會出現以下bug及解決方法
下文報錯是直接運行的報錯
Fri Oct 09 02:15:43 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 4,126 milliseconds ago. The last packet sent successfully to the server was 4,086 milliseconds ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:203)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4901)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1659)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2188)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2219)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2014)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.itheima.code.build.TemplateBuilder.builder(TemplateBuilder.java:90)
at com.itheima.CodeApplication.main(CodeApplication.java:14)
Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2020)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1127)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:188)
... 19 more
解決方法是:在maven中依賴改為自己本地對應的mysql的版本(使用的mysql庫位置的版本)對應自己的版本

外加組態檔中的必須要加入cj 就會包 缺少cj的錯誤
復制區:driver=com.mysql.cj.jdbc.Driver

解決以上錯誤后很可能出現這個錯誤
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.substring(String.java:1963)
at com.itheima.code.util.StringUtils.firstUpper(StringUtils.java:16)
at com.itheima.code.build.TemplateBuilder.builder(TemplateBuilder.java:180)
at com.itheima.CodeApplication.main(CodeApplication.java:14)
這個錯誤為下標越界,程式自身沒有處理這個問題,在mysql低版本不會出現類似的問題,但是在現在8.0的版本就會報錯
一般會出現2個下標越界的位置報錯:出現之后只需用下圖的方式可以解決

復制區:
if (str.trim().length()!=0){
return str.substring(0,1).toUpperCase()+str.substring(1);
}
return "";
這樣就可以正常使用了
特別提醒新人:任何語言路徑盡量避免中文命名,有時候路徑亂碼就會報錯
用判斷解決越界的問題來自于 https://www.freesion.com/article/99241329643/ 的帖子
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/163889.html
標籤:Java
上一篇:2、Spring Boot配置
