com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败

我正在努力让我的数据库与我的Java程序交谈。

有人可以给我一个快速和脏的示例程序使用JDBC?

我得到一个相当惊人的错误:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.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 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:207) at SqlTest.main(SqlTest.java:22) Caused by: com.mysql.jdbc.exceptions.jdbc4.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 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181) ... 12 more Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.<init>(Socket.java:375) at java.net.Socket.<init>(Socket.java:218) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293) ... 13 more 

testing文件的内容:

 import com.mysql.jdbc.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SqlTest { public static void main(String [] args) throws Exception { // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init // // edit the jdbc url Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123"); // Statement st = conn.createStatement(); // ResultSet rs = st.executeQuery( "select * from table" ); System.out.println("Connected?"); } } 

所以,你有一个

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
java.net.ConnectException:连接被拒绝

我从这个答案引用,其中还包含一步一步的MySQL + JDBC教程:

如果您遇到SQLException: Connection refusedConnection timed out或MySQL特定的CommunicationsException: Communications link failure ,则意味着数据库根本无法访问。 这可能有一个或多个以下原因:

  1. JDBC URL中的IP地址或主机名是错误的。
  2. 本地DNS服务器无法识别JDBC URL中的主机名。
  3. JDBC URL中缺less端口号或错误。
  4. 数据库服务器已closures。
  5. 数据库服务器不接受TCP / IP连接。
  6. 数据库服务器已经用完了连接。
  7. Java和DB之间的东西阻塞连接,例如防火墙或代理。

要解决这个或那个问题,请遵循以下build议:

  1. 使用pingvalidation并testing它们。
  2. 刷新DNS或使用JDBC URL中的IP地址。
  3. 根据my.cnfvalidation。
  4. 启动数据库。
  5. validationmysqld是否在没有--skip-networking option情况下启动。
  6. 重新启动数据库,并相应地修复你的代码,最终closures连接。
  7. 禁用防火墙和/或configuration防火墙/代理以允许/转发端口。

也可以看看:

  • 我应该如何在基于servlet的应用程序中连接到JDBC数据库/数据源?
  • 在multithreading系统中使用静态java.sql.Connection实例是否安全?

当Java堆出来的时候,我发现了这个exception。 如果我尝试在RAM中放入很多数据项 – 首先我要捕获“ 通信链接失败 ”和下一个“ OutOfMemoryError ”。

我login了,并减less了内存消耗(删除1/2数据),一切正常。

这是最好的解决scheme,

  Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/DBname", "root", "root"); Connection con = DriverManager.getConnection( "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root"); 

将Localhostreplace为您的IP地址

如果您的数据库连接长时间处于空闲状态,则会发生此com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionexception。

这个空闲连接在connection.isClosed();上返回true connection.isClosed(); 但是如果我们试图执行语句,那么它会触发这个exception,所以我会build议去数据库池。

我可能会在这里吠叫错误的树,但是你的exception似乎表明你的MySQL服务器不可用。

线程“main”中的exceptioncom.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败成功发送到服务器的最后一个数据包是0毫秒前。 驱动程序尚未收到来自服务器的任何数据包。 在…

如果你尝试(从terminal)会发生什么

 mysql -u username -p 

系统将提示您input与用户名关联的密码。 你给了正确的密码后,MySQL客户端连接?

如果不是,你可能必须从Preferences中启动MySQL。 您也可以将其设置为在启动时运行。

我几个小时都遇到同样的问题。 我正在使用MAMP服务器

而不是使用localhost:[Apache Port],使用你的MySQL端口。

以下是MAMP服务器的默认MySQL端口。

 String url = "jdbc:mysql://localhost:8889/db_name"; Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword); 

在Mysql上下载MySQL-JDBC-Type-4-Treiber(ig'mysql-connector-java-5.1.11-bin.jar'from'mysql-connector-java-5.1.11.zip')。

你需要在编译和运行时在你的classpath中join驱动jar。

 Class.forName( "com.mysql.jdbc.Driver" ); // do this in init // edit the jdbc url Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password ); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery( "select * from table" ); 

我得到了同样的错误,因为我试图运行我的程序,而不启动MySQL服务器。

启动MySQL服务器后,一切正常。

请在/etc/mysql/my.cnf文件中更新您的IP地址

 bind-address = <IP_ADDRESS> 

重新启动mysql deamon和mysql服务。

刚刚经历过这个。

必须使其工作:(这可以放在静态块初始化器中)

 static{ // would have to be surrounded by try catch Class.forName("com.mysql.jdbc.Driver"); // this will load the class Driver } 

还通过以下方式获取连接:

 conn = DriverManager.getConnection(DBURL,<username>,<password>); 

而不是指定login参数

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123"); 

问候。

我有同样的问题,这是如何修复的:

  1. 我的.jsp调用了我尚未在servlet中定义的属性。
  2. 我有两个列名,我通过ResultSet (getString("columnName"))传入一个对象与我的数据库中的列名称不匹配。

我不是很确定哪一个解决了问题,但它工作。 此外,请确保您为每个表查询创build一个新的StatementResultSet

如果您使用WAMPXAMP服务器来安装mysql数据库。 然后你必须明确启动MySQL服务器其他明智的,它会显示com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure同时连接数据库

我的同样的问题是通过以下步骤解决的:

  1. 去my.cnf

    vi /etc/mysql/my.cnf

  2. 修改其绑定地址

    "#bind-address = 127.0.0.1"

  3. 重启mysql

    sudo /etc/init.d/mysql restart

我以一种简单的方式解决了这个问题,这对我有效。 我有seme问题“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败”。 在我的db.properties文件中,我有这个:url:jdbc:mysql:// localhost:90 / myDB,只删除了端口url,导致这种方式url:jdbc:mysql:// localhost / myDB, 。

这发生在我身上,当我在my.ini和php.ini文件中将3306的mysql端口从3306更改为3307,但将端口(3307-> 3306)更改回来后,再次正常工作。

在我的情况下,原来是mysql-connector-java的版本是高的。

在我的演示中,我以某种方式使用mysql-connector-java像这样:

 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> 

但在开发环境中,我使用这个:

 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.31</version> </dependency> 

而我的MySQL版本是5.1.48(是的,它是旧的,只是为了模仿产品版本)。 所以我遇到了同样的错误。

既然find了原因,解决办法也find了。 匹配版本!

如果有读者遇到这个问题访问远程服务器:确保端口是打开的

较早的答案是适当的。 但是,我也想指出一个更普遍的问题。

我面临类似的问题,原因是我的公司的networking限制。

当我在任何其他networking时,同样的连接变得成功。

尝试将localhost更改为127.0.0.1

本地主机将被parsing为::1 。 MySQL默认不能通过IPv6连接。

这里是telnet localhost 3306的输出:

 $ telnet localhost 3306 Trying ::1... 

并没有从MySQL服务器的响应。

当然,请确保你的MySQL服务器正在运行。

也许你没有启动你的Mysql和Apache服务器。 从XAMPP控制面板启动Apache服务器和Mysql后,连接成功build立。

祝你好运!

为我解决的是做2件事:1.使用以下connads创build除root以外的一些新密码:

 CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost'; FLUSH PRIVILEGES; 

2.注释mysqld.conf上的IP地址行

然后连接新的用户名和密码。 它应该工作。

我在IntelliJ IDEA面临同样的问题。

为了解决连接问题,我必须断开连接( + F2使用默认的键盘绑定在Mac上)并重新连接。 只是按“刷新”是不够的。

这可能是一个简单的jar问题。 可能是你正在使用一个旧的mysql-connector-java-XXX-bin.jar ,这是你当前的mysql版本不支持的。 我使用mysql-connector-java-5.1.18-bin.jar因为我使用的是mysql 5.5 ,这个问题已经解决了。

如果您更改了端口,则会出现此类错误“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败”请检查您的端口号