【发布时间】: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.8 和 8.8.4.4,从而解决了这个问题。
【问题讨论】:
标签: java jdbc azure-sql-database jtds