我已经搜索了该站点,但还没有找到可以回答我的问题的帖子。
我编写了一个桌面应用程序(Java/swing/JDBC)来通过 JDBC 连接到本地数据库。该数据库托管在 IBM i 系列 (AS400) 上(尽管我很确定这不是仅 as400 的问题),并且仅在内部网络上可用。我正在将该应用程序翻译成一个 android 应用程序,以便通过无线连接在仓库中使用。
我在它自己的线程中有我的 JDBC 连接。该应用程序在尝试连接之前询问用户用户名/密码。每次连接都失败并显示相同的消息:java.sql.SQLException: The application requester cannot establish the connection. (No route to host)
这是有问题的代码:
try
{
// Use the AS400 driver.
DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
// Now connect
connection = DriverManager.getConnection(
"jdbc:as400://" + IP_ADDRESS + "/" + SCHEMA +
";naming=sql;errors=full",
USER_ID, PASSWORD);
System.out.println("Connection established using the AS400 driver(s)");
}
catch(Exception as400)
{
String message = "Error setting driver and connection using\n "
+ "the AS400 drivers. The error message is as follows:\n "
+ as400.getMessage();
System.out.println(message);
throw new Exception(message);
}
它注册驱动程序然后点击No route to host
,暂停一秒钟,然后抛出一个错误,完全停止设备,而不是让我的错误处理程序安全地关闭应用程序。
我进行了双重(三重)检查以确保正确传递凭据并且正确设置了 IP 和架构。此代码是我的桌面代码的直接副本。唯一的区别是我使用为 android 而不是桌面优化的 jar。该 jar 仅包含本地 AS400 代码和 Java 之间的转换层,但与任何 SQL jar 的工作方式相同。
这是我们整个公司使用的主要数据库服务器。它始终可用并且在其上启用了 SQL。我正在使用物理 android 设备(不是模拟设备)对此进行测试,它已连接到我们的内部无线网络。
关于如何解决这个问题甚至是寻找方向的任何建议?尽管都使用 JDBC,为什么桌面和我的 android 之间存在如此大的差异?我需要为地址解析或类似的东西做一些特别的事情吗?Google-fu 让我很失望。谢谢你的帮助!