使用 JDBC 和 android 应用程序时如何解决“CommunicationsException: Communications link failure”

Posted

技术标签:

【中文标题】使用 JDBC 和 android 应用程序时如何解决“CommunicationsException: Communications link failure”【英文标题】:how to solve the "CommunicationsException: Communications link failure" when working with JDBC and android application 【发布时间】:2013-03-20 16:16:23 【问题描述】:

当我尝试将我的 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:连接被拒绝或连接超时 或 mysql 特定的 CommunicationsException: Communications link 失败,则意味着数据库根本无法访问。这个可以 有以下一种或多种原因:

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

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

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

来自this answere。

我尝试了所有选项,但不确定如何使用“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  

【问题讨论】:

我的连接代码:private MySQLConnectivity() try Class.forName("com.mysql.jdbc.Driver");连接(); catch (ClassNotFoundException e) // TODO 自动生成的 catch 块 e.printStackTrace(); public void Connect() try MySQLConnectivity.Conn = (Connection)DriverManager.getConnection(URL, USER, PASS); catch (SQLException e) // TODO 自动生成的 catch 块 e.printStackTrace(); 最后 【参考方案1】:

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

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

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");

【讨论】:

以上是关于使用 JDBC 和 android 应用程序时如何解决“CommunicationsException: Communications link failure”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用库 jTDS JDBC 驱动程序将 android 应用程序连接到 sql server 2012

如何将 Mysql JDBC 驱动程序导入到 android studio

如何将 Mysql JDBC 驱动程序添加到 android studio

在android中使用JDBC安全可靠吗?

如何MySQL JDBC驱动程序到Android工作室

如何从 Android 应用程序通过 JDBC 连接到远程 MySQL 服务器