使用Microsoft Azure和JTDS的EHOSTUNRACH(无主机路由)



我正在开发一个与azure数据库相关的android应用程序然而,当我在homenetowrk上测试该应用程序时,该应用程序运行时没有任何错误当我外出或连接到另一个wifi网络时出现此错误

W/System.err: java.sql.SQLException: Network error IOException: failed to connect to devserverall.database.windows.net/xx.xxx.xxx.xx (port 1433) from /yyy.yyy.y.yyy (port 48262) after 30000ms: isConnected failed: EHOSTUNREACH (No route to host)
at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:436)
W/System.err:     at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
at java.sql.DriverManager.getConnection(DriverManager.java:580)
at java.sql.DriverManager.getConnection(DriverManager.java:236)
at com.example.helpy.BackgroundTask2.connection(BackgroundTask2.java:32)
at com.example.helpy.BackgroundTask2.executelist(BackgroundTask2.java:47)
at com.example.helpy.BackgroundTask2.doInBackground(BackgroundTask2.java:113)
at com.example.helpy.BackgroundTask2.doInBackground(BackgroundTask2.java:16)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)

我使用jtds模块用这个连接字符串连接到azure

jdbc:jtds:sqlserver://devserverall.database.windows.net:1433;DatabaseName=xxx;user=xxxx@devserverall;password=xxxxx;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;

可能,这看起来像是一个网络连接问题,您可以验证是否:

  • 该应用程序已成功从wifi网络连接到互联网。确保WiFi或手机已打开并可正常工作
  • 应用程序传出的公共IP地址已从您的wifi网络更改,您可以将新的客户端IP添加到Azure SQL server防火墙,请参阅此
  • 端口1433在您的wifi网络中被阻止

有关更多详细信息,请参阅此答案。