java - 为什么我不能将 java 连接到 MySql ,(连接错误)?
问题描述
我正在尝试连接 MySql 和 Java,但我从这段代码中得到了这个错误。
代码:
public class ConnessioneMySql {
public static void main(String[] args) throws SQLException {
Connection cn;
Statement st;
ResultSet rs;
String sql;
cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/TelegramBot", "root", "password");
sql = "SELECT * FROM Utente;";
try {
st = cn.createStatement();
rs = st.executeQuery(sql);
while (rs.next() == true) {
System.out.println(rs.getString("IdUtente") +
"\t" + rs.getString("CAPITALE")
+ "\t" + rs.getString("N_Inviti")
+ "\t" + rs.getString("Guadagno")
+ "\t" + rs.getString("DataUltimoAggiornamento"));
}
} catch (SQLException e) {
System.out.println("errore:" + e.getMessage());
}
cn.close();
}
}
错误:
Exception in thread "main" com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at ConnessioneMySql.main(ConnessioneMySql.java:11)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the 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.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89)
at com.mysql.cj.NativeSession.connect(NativeSession.java:144)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:956)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)
... 6 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.base/sun.nio.ch.Net.connect0(Native Method)
at java.base/sun.nio.ch.Net.connect(Net.java:503)
at java.base/sun.nio.ch.Net.connect(Net.java:492)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
at java.base/java.net.Socket.connect(Socket.java:648)
at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)
... 9 more
Process finished with exit code 1
我实际上并没有使用本地主机,但我只是用“本地主机”替换真实地址。
MySql 正在运行。
MySql 版本:8.0.21
mysql-connector-java 版本:8.0.22
可能是防火墙什么的问题...
解决方案
- 确保您有一个名为“TelegramBot”的数据库。
2.确保MySql服务正在运行。您可以通过在任务管理器中检查“服务”来做到这一点
- 修改代码:替换这个:
cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/TelegramBot", "root", "密码");
有了这个:
字符串 url = "jdbc:mysql://localhost:3306/TelegramBot?useUnicode=true&useJDBCCompliantTimeZoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
cn = DriverManager.getConnection(url, "root", "password");
推荐阅读
- c# - 当我关闭 SqlConnection 时,它会从 SqlCommand 和 SqlDataReader 中释放资源吗?
- python - 如何加速 Keras model.predict?
- android - 不同部分的搜索栏颜色
- mysql - 将 CSV 样式的 varchar 列移动到新表中
- django - Django 测试在 unique_together 错误捕获后失败
- cron - 以非常奇怪的时间计划运行工作
- pdf - 通过站点直接下载 GCS 对象
- python - 在 Ubuntu 20.04 上将 USB 击键的 (Wireshark) LiveCapture 读取到 python 中?
- vue.js - Vue axios 方法需要点击两次?
- python - 将excel中的十进制数更改为python(spyder)的格式