0%

关于jdk11.0.5和数据库Mysql8.0的连接出现的问题和连接方法,我做了一下整理(项目是Javaweb项目用的是maven配置外包)

先说错误和出现的问题再说连接的方法

首先咱们的数据库是Mysql的,这个应该是你们下载好了的,然后jdk也是下载好了的,我用的软件是IDEA,看一下是不是软件不是我说的这两种,如果不是就不用往下看了,开个玩笑,其实也可以用我会介绍别的版本的区别。
数据库Mysql8.0
这是项目里看的jdk版本
借助项目来说,这个项目首先是maven的配置外包驱动,不是maven的项目的,可以百度搜一下你们的数据库连接驱动的jar包(一般报名叫),导入项目中,可以问一下老师,或百度都有看图。数据库连接的jar包
然后我们说maven的数据库连接驱动的导入方法,找到maven的配置文件,然后如图,(这里回答一下上面对于版本的问题,数据库是8.0就用这个代码,不是8.0就百度一下数据库8.0的连接驱动maven配置代码配置代码就好,这一步很简单):
在这里插入图片描述
代码粘贴进去之后有一个下载时间要等待,然后下载完了就是这样!
在这里插入图片描述
接下来会迎来第一个错,如果你的数据库连接的驱动在maven中配置的和数据库不合适就会包这个错

1
2
3
4
5
6
7
8
"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57172:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\权限管理系统\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\5.0.2\mysql-connector-java-5.0.2.jar com.pm.util.DbUtil
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at com.pm.util.DbUtil.main(DbUtil.java:33)

在这里插入图片描述
所以要是报的这个错就是应该是上面说的原因,接下来我们进入下一个错误
项目中呢要有一个对这个数据库配置文件进行操作的类,其中有一句加载数据库驱动的代码容易写错

1
Class.forName("com.mysql.cj.jdbc.Driver");//这句话容易写成Mysql5.3等之前的版本的,这里咱们8.0就是这么写

这是报错信息

1
2
3
4
"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57535:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\权限管理系统\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
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.

进程已结束,退出代码 0

看图:在这里插入图片描述
如果这是是对的,还报错就要看是不是下面的错误了,先看错误代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57693:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\权限管理系统\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
Fri Mar 27 20:14:28 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.
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:862)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at com.pm.util.DbUtil.main(DbUtil.java:37)
Caused by: com.mysql.cj.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 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:83)
at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:128)
at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2201)
at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2225)
at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1391)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:993)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852)
... 6 more

进程已结束,退出代码 0

在这里插入图片描述
这个错误的原因呢是因为下面的代码没写全(代码中的参数root是下载数据库时候设置的名字,不是数据库名啊,一般都是root,第三个参数是你的Mysql的密码)

1
2
//        获取链接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_pm?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT","root","1215");

上面的错误就很不好找的了,再说几个好找的错误(数据库名称不对,数据库密码不对,sql语句中的字段不对和数量类型不匹配的问题)
数据库名称不对

1
2
3
4
5
6
7
8
9
10
11
12
13
14
"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57950:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\权限管理系统\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
java.sql.SQLSyntaxErrorException: Unknown database 'dbpm'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at com.pm.util.DbUtil.main(DbUtil.java:36)

进程已结束,退出代码 0

在这里插入图片描述
数据库密码不对

1
2
3
4
5
6
7
8
9
10
11
12
13
14
"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57964:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\权限管理系统\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at com.pm.util.DbUtil.main(DbUtil.java:36)

进程已结束,退出代码 0

在这里插入图片描述
sql语句中的字段不对和数量类型不匹配的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
"D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=57993:D:\IDEA 2019.3.3\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\权限管理系统\target\classes;D:\Alibabayunku\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar;D:\Alibabayunku\com\google\protobuf\protobuf-java\2.6.0\protobuf-java-2.6.0.jar com.pm.util.DbUtil
java.sql.SQLSyntaxErrorException: Unknown column 'addrs' in 'field list'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:960)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1116)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1066)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1396)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1051)
at com.pm.util.DbUtil.main(DbUtil.java:50)

进程已结束,退出代码 0

在这里插入图片描述
还有好的错误,就不都说了,主要的jdk11.0.5和Mysql8.0就是这几个错误,
然后,说一下数据库连接代码咋写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.pm.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.UUID;

public class DbUtil {
public static void main(String[] args) {
Connection conn=null;
PreparedStatement ps=null;
try {
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取链接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT","root","你的数据库密码");
// 执行sql
//插入条数据,sql语句要会写,然后括号代表要插入的数据,先用?来代表
String sql="insert into user(username,password,name,age) values(?,?,?,?)";
// 获取执行sql的对象
ps=conn.prepareStatement(sql);
// 给?赋值,按照顺序赋值,要和数据库表中的字段相对应
ps.setString(1,"小明");
//随机生成字符串来当作密码
String pwd= UUID.randomUUID().toString();
ps.setString(2,pwd);
ps.setString(3,"小明");
ps.setInt(4,25);
// 如果有查询的话,返回结果
ps.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
// 释放连接
if (ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

还有赠送一个jdbc驱动程序类是否加载成功的代码:

1
2
3
4
5
6
7
try{
//加载MySql的驱动类
Class.forName("com.mysql.cj.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类 ,加载驱动失败!");
e.printStackTrace() ;
}

还有一个是否能连接上的测试代码

1
2
3
4
5
6
7
8
9
10
11
 //连接MySql数据库,用户名和密码都是root
String url = "jdbc:mysql://localhost:3306/db_pm?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT" ;
String username = "root" ;
String password = "1215" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("数据库连接失败!");
se.printStackTrace() ;
}

如果对你有帮助,点赞一下呗,挺不容易的哈哈哈

-------------本文结束感谢您的阅读-------------