使用 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