0

当我尝试将我的 java 程序连接到服务器时,我得到了这个异常:

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.

所以我找到了这些说明:

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

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

要解决其中一个问题,请遵循以下建议:

  1. 使用 ping 验证和测试它们。
  2. 刷新 DNS 或改用 JDBC URL 中的 IP 地址。
  3. 根据 MySQL DB 的 my.cnf 进行验证。
  4. 启动数据库。
  5. 验证 mysqld 是否在没有 --skip-networking 选项的情况下启动。
  6. 重新启动数据库并相应地修复您的代码,使其最终关闭连接。
  7. 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

这个答案。

我尝试了每个选项,但我不确定如何使用“my.ini”配置文件验证端口号(选项 3)。另外,我发现 services.msc 列表中缺少“MySQL”服务,但我确实发现使用了 3306 端口。它与问题有关吗?'my.ini' 配置文件应该是什么样子?我使用 MySQL Workbench 5.2.47。(MySQL 服务器版本为 5.6)。

我的连接代码:

    private MySQLConnectivity() { 

try { Class.forName("com.mysql.jdbc.Driver"); Connect(); 
} catch (ClassNotFoundException e) 
{ // TODO Auto-generated catch block e.printStackTrace(); } 
} 
public void Connect() { try { MySQLConnectivity.Conn = (Connection)DriverManager.getConnection(URL, USER, PASS);
 } catch (SQLException e) 
{ // TODO Auto-generated catch block e.printStackTrace(); 
} finally { }
4

1 回答 1

2

我使用最新版本的 adt 和mysql-connector-java-5.1.17-bin.jar,这对我有用:

之后将以下代码添加到您的 mafile 中setContentView(R.layout.activity_main)

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

并使用import android.os.StrictMode;

如果您使用新的 api,请添加@SuppressLint("NewApi");

于 2013-11-19T04:59:07.687 回答