使用 JTDS 的 Azure sql 连接挂起

Azure sql connection hangs using JTDS

我正在尝试使用 JTDS JDBC 驱动程序连接到 Azure SQL 服务器。我之前已经建立了工作连接,但一夜之间它就挂起了

DriverManager.getConnection(url);

它没有给我任何异常,并继续 运行 超过连接字符串中默认的 30 秒超时。完整代码如下

        try {
            StrictMode.ThreadPolicy pol = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(pol);

            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            String url = "jdbc:jtds:sqlserver://{server}.database.windows.net:1433;database=PROD;user={username}@{server};password={password};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;";
            Connection c = DriverManager.getConnection(url);

            c.close();
        }
        catch(Exception e)
        {
            new AlertDialog.Builder().setTitle("e").setMessage(e.getMessage()).setNegativeButton("e", null).show();
        }

我可以使用 SSMS 连接和查询数据库,据我所知数据库工作正常。虽然我是使用 SQL 服务器的初学者,所以我可能是错的。我发现 SQL 服务器版本是 12.0.2000.8。 JTDS 文档建议在某些情况下更改 TDS 版本,但根据我的尝试,这并没有解决我的问题。我正在使用 JTDS 版本 1.3.1.

同样,这个方法昨天工作正常,现在我遇到了问题。项目中没有任何更改。昨天我没有在创建连接后关闭它,所以我有一种预感 SQL 服务器上存在一些问题。

现在,几个小时后,几秒钟后连接成功,当我尝试重新运行该应用程序时,它遇到了同样的问题。

找到我的解决方案:

似乎 android 模拟器的 DNS 有问题。在 这个帖子之后,我能够手动将我的 DNS 设置为 8.8.8.88.8.4.4,这解决了这个问题。

恭喜您找到解决方案:

似乎 android 模拟器的 DNS 有问题。在 这个帖子之后,我能够手动将我的 DNS 设置为 8.8.8.88.8.4.4,这解决了这个问题。

我post将此作为答案,这可能对其他社区成员有益。