代码生成器在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/ 的帖子