新版本mysql连接问题 java
程序员文章站
2022-05-30 19:42:38
...
java连接mysql
一前老版本的mysql用下面的代码连接是没有问题的。
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Wed Apr 04 10:00:51 CST 2018 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.
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:874)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:234)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:227)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at JDBC.Jdbc.JdbcMysql(Jdbc.java:24)
at JDBC.Jdbc.main(Jdbc.java:12)
Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
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.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:60)
at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:79)
at com.mysql.cj.core.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:126)
at com.mysql.cj.mysqla.MysqlaSession.configureTimezone(MysqlaSession.java:385)
at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1406)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1005)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:864)
... 7 more
那么我们下面一条一条进行解决
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.sh
首先看到这个提示信息我们就知道是驱动的位置不对,我们给搞错了。
那有的同学说一直都是用的这个啊 没错啊,以前用时没错但是新版本有了新的驱动所以这里应该用新的驱动而不是老的。
解决办法就是:
String driverName="com.mysql.jdbc.Driver"; 改为 String driverName="com.mysql.cj.jdbc.Driver";
我们再看下一个
Wed Apr 04 09:49:35 CST 2018 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.
这里是存在一个信任库的问题。
解决办法
String url="jdbc:mysql://localhost:3306/bk"; 变为 String url="jdbc:mysql://localhost:3306/bk?useSSL=true";
ok提示的信息我们都解决完了。下面看看异常吧
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
这个是由库的时间与系统时间不符导致的。
解决办法
String url="jdbc:mysql://localhost:3306/bk?useSSL=true"; 变为 String url="jdbc:mysql://localhost:3306/bk?serverTimezone=GMT&useSSL=true";
好了那我们做完了以上操作在来试一下效果。
上一篇: jdbc连接MySQL8.0的问题
下一篇: Qt连接MySQL的问题