通过 ms jdbc 连接到 Azure SQL DB 的 Android 应用程序错误

Posted

技术标签:

【中文标题】通过 ms jdbc 连接到 Azure SQL DB 的 Android 应用程序错误【英文标题】:Android App error connecting to Azure SQL DB via ms jdbc 【发布时间】:2016-10-05 11:15:35 【问题描述】:

我是 android 应用程序开发的新手,我正在尝试使用本机 MS JDBC 驱动程序 (sqljdbc4.jar) 连接到 Azure SQL DB,但我不断收到以下错误:

“错误连接:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接。错误:“套接字已关闭”。”

我可以使用与 squirrel 相同的连接字符串连接到数据库。

我使用的是 android studio 2.1.3,但我真的束手无策...... 这是代码:

DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String username = "<>";
String password = "<>";
java.sql.Connection DbConn = DriverManager.getConnection("jdbc:sqlserver://<myserver>:1433;databaseName=thumbsupp;user=" + username + ";password=" + password + ";encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;");

我什至尝试在代码中打开端口 1433 上的套接字:

SocketFactory sf = SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) sf.createSocket("<myserver>", 1433);
HostnameVerifier hverify = HttpsURLConnection.getDefaultHostnameVerifier();
SSLSession ssoc = socket.getSession();

虽然我打电话时得到true,但并没有占上风

hverify.verify();

我是否缺少 Android Studio 中的一些配置?

编辑:如果检查套接字上启用的协议:

socket.getEnabledProtocols();

我得到的唯一协议是 TLS1.0、TLS1.1 和 TLS1.2 ??

【问题讨论】:

【参考方案1】:

似乎有很多 SO/MSDN 线程都有相同的问题。同时,一种解决方法是使用 jTDS Driver 而不是 MS SQL Server JDBC Driver。

请参考以下这些主题来解决您的问题。

    Sql Database connect Using the JDBC Driver with android https://social.msdn.microsoft.com/Forums/sqlserver/en-US/4799819a-27fd-4292-a3d8-f114207c20b2/using-the-jdbc-driver-with-android?forum=sqldataaccess https://blogs.msdn.microsoft.com/nickhodge/2010/01/25/jdbc-to-sql-azure/

希望对你有帮助。

【讨论】:

以上是关于通过 ms jdbc 连接到 Azure SQL DB 的 Android 应用程序错误的主要内容,如果未能解决你的问题,请参考以下文章