【问题标题】:Azure sql connection hangs using JTDSAzure sql 连接使用 JTDS 挂起
【发布时间】:2020-04-12 08:15:06
【问题描述】:

我正在尝试使用 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 server 版本是12.0.2000.8。 JTDS 文档建议在某些情况下更改 TDS 版本,但从我的尝试来看,这并没有解决我的问题。我使用的是 JTDS 1.3.1 版。

同样,这种方法昨天运行良好,现在我遇到了问题。项目中没有任何改变。昨天我在创建连接后没有关闭连接,所以我预感到 SQL Server 上存在一些问题。

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

找到了我的解决方案:

似乎安卓模拟器的 DNS 有问题。在Android Studio - Android Emulator Wifi Connected with No Internet 这个帖子之后,我能够手动将我的 DNS 设置为 8.8.8.88.8.4.4,从而解决了这个问题。

【问题讨论】:

    标签: java jdbc azure-sql-database jtds


    【解决方案1】:

    恭喜您找到了解决方案:

    似乎安卓模拟器的 DNS 有问题。在Android Studio - Android Emulator Wifi Connected with No Internet 这个帖子之后,我能够手动将我的 DNS 设置为 8.8.8.88.8.4.4,从而解决了这个问题。

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

    【讨论】: