SQLException:No suitable driver found for…(没有找到合适的驱动)
源代码
public class ConnDemo {
public static void main(String[] args) throws SQLException {
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "mysql:jdbc://localhost:3306?useSSL=false&characterEncoding=utf-8";
String username = "root";
String password = "root";
connection = DriverManager.getConnection(url, username, password);
System.out.println("连接数据库成功");
} catch (ClassNotFoundException e) {
System.out.println("驱动程序不存在");
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (connection!=null){
connection.close();
}
}
}
}
错误信息
java.sql.SQLException: No suitable driver found for mysql:jdbc://localhost:3306?useSSL=false&characterEncoding=utf-8&timeZone=CST
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.gxa.day27.ConnDemo.main(ConnDemo.java:46)
分析解决
- 根据异常提示的原因:没有找到匹配的驱动,可以先不去核实自己是否引入驱动(Add as Library),而是要去考虑连接字符串的问题
- 原来的字符串为:
mysql:jdbc://localhost:3306?useSSL=false&characterEncoding=utf-8 - 修改为:
jdbc:mysql://localhost:3306?useSSL=false&characterEncoding=utf-8 - 结果:成功,但仍有警告。
Thu Sep 30 19:59:01 CST 2021 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.
连接数据库成功
翻译过来就是:不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果未设置explicit选项,默认情况下必须建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为“false”。您需要通过设置useSSL=false显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任库
- 这一个警告就是让你是否使用SSL信任的加密连接方式,这里可以选择
useSSL=false
- 原来的字符串为:
jdbc:mysql://localhost:3306?useSSL=false&characterEncoding=utf-8 - 修改为:
jdbc:mysql://localhost:3306?useSSL=false&characterEncoding=utf-8&timeZone=CST - 结果:成功
- 其实使用MySQL5以上的版本,都可以不用再带时区的参数
timeZone=CST ,因为带和不带,运行都不会有警告和错误。但是,使用MYSQL8以上的版本,必须要带上时区的参数。
CST(中国时区) UTC:国际标准
|