我正在尝试连接到我在Java程序中使用MySQL创建的数据库,但它总是失败.
为了举例,这是我的代码:
import java.sql.*;
public class Squirrel {
public static void main(String[] args) {
String user;
String password;
Connection connection;
Statement statement;
try {
Class.forName("com.MysqL.jdbc.Driver");
connection = DriverManager.getConnection(
"jdbc:MysqL://localhost:3306",user,password);
statement = connection.createStatement();
// Other code
} catch (ClassNotFoundException | sqlException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (sqlException e) {
e.printStackTrace();
}
}
}
}
我能够从IntelliJ中连接到数据库,并添加了添加到项目中的MysqL-connector-java-5.1.40.jar,但每次运行程序时,DriverManager.getConnection()都会抛出:
com.MysqL.jdbc.exceptions.jdbc4.MysqLNonTransientConnectionException: Could not create connection to database server.
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:488)
at com.MysqL.jdbc.Util.handleNewInstance(Util.java:425)
at com.MysqL.jdbc.Util.getInstance(Util.java:408)
at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:918)
at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:897)
at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:886)
at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:860)
at com.MysqL.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2330)
at com.MysqL.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
at com.MysqL.jdbc.ConnectionImpl.MysqL.jdbc.JDBC4Connection.MysqL.jdbc.Util.handleNewInstance(Util.java:425)
at com.MysqL.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
at com.MysqL.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
at Squirrel.main(Squirrel.java:12)
Caused by: java.lang.NullPointerException
at com.MysqL.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2997)
at com.MysqL.jdbc.MysqLIO.sendConnectionAttributes(MysqLIO.java:1934)
at com.MysqL.jdbc.MysqLIO.proceedHandshakeWithPluggableAuthentication(MysqLIO.java:1863)
at com.MysqL.jdbc.MysqLIO.doHandshake(MysqLIO.java:1226)
at com.MysqL.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
at com.MysqL.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
... 13 more
最佳答案
这可能是因为您使用的是旧版本的MysqL驱动程序.
您应该尝试使用最新版本.
原文链接:https://www.f2er.com/mysql/433304.html您应该尝试使用最新版本.
要获得最新版本,您可以查看https://mvnrepository.com/artifact/mysql/mysql-connector-java
截至目前,最新版本为8.0.11.您可以下载它here或将其添加到您的pom.xml:
MysqL
更新
经过进一步调查,似乎是因为MySQL 8.0.1中引入了一个变化:
The issue you reported is related to the changes introduced in MySQL
8.0.1 wrt the character sets and collations support,with the addition of now being ‘utf8mb4’ the default char set. Such changes broke the
way Connector/J initializes connections.As you know this was fixed in Connector/J 5.1.41 and I’m sure you
already updated your library.
如上所述,对您的问题的另一种解决方法是使用5.1.41而不是5.1.40.