通过 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 应用程序错误的主要内容,如果未能解决你的问题,请参考以下文章
如果 SQL Server 是 MS 2012,则从 Pyodbc 连接到 SQL 14 Azure db
为啥我可以使用 tsql 而不是 pymssql 连接到 Azure MS SQL?
Google App Maker可以连接到Azure中的MS SqlServer数据库吗?
无法使用 JDBC 连接通过 SSH 隧道连接到 Azure DB