将 SQL Azure 与 Android 连接起来

Posted

技术标签:

【中文标题】将 SQL Azure 与 Android 连接起来【英文标题】:Connecting SQL Azure with Android 【发布时间】:2012-04-05 16:10:00 【问题描述】:

我正在尝试从我的 android 应用程序连接 SQL Azure。该代码适用于我设法从 SQL Azure 获取数据的 Java 应用程序,但它会为我的 android 引发错误。以下是我的代码和错误消息。 代码:

String connectionString =
                    "jdbc:sqlserver://serversql.database.windows.net:1433" + ";" +  
                "database=dbname    " + ";" + 
                "user=user@serversql" + ";" +  
                "password=password";
            Connection connection = null;  // For making the connection
            Statement statement = null;    // For the SQL statement 
            ResultSet resultSet = null;    // For the result set, if applicable 
        try
        

            // Ensure the SQL Server driver class is available.
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");              
            // Establish the connection.
            connection = DriverManager.getConnection(connectionString);
            String filename = "SVPoster.jpg";
            String sql = "Select * from VoucherTable";
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);
            int count;
            if(resultSet.next())
            
                Blob test = resultSet.getBlob("Voucher"); 
                InputStream x=test.getBinaryStream();
                int size=x.available();
                OutputStream output = new FileOutputStream("/sdcard/"
                        + filename);
                byte data[] = new byte[1024];
                long total = 0;
                while ((count = x.read(data)) != -1) 
                    total += count;
                    output.write(data, 0, count);
                
                output.flush();
                output.close();
                x.close();
                           
        
        catch (Exception ex)
        
            Toast.makeText(getApplicationContext(), ex.toString(),
                     Toast.LENGTH_LONG).show();
        

错误信息

com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host server.database.windows.net, port 1433 has failed. Error: "null. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".

【问题讨论】:

附带说明,如果这将是一个用于大规模分发的 android 应用程序,您真的不应该将与 SQL Azure 数据库(或任何数据存储)的连接放入应用程序本身。这会将那个王国的钥匙交到任何拥有该应用程序的人手中。相反,您应该使用数据服务(最好托管在数据附近)来处理任何数据请求。这不仅可以保护数据库免受不受控制、不受监控的访问,还可以让您实现数据缓存等功能,这些功能将帮助您随着服务需求的增加而扩展。 @BrentDaCodeMonkey 感谢您提供的信息。我在发布他们建议使用 WEB SERVICE 的问题后阅读了一篇文章... 这正是我会做的事情。 :) 【参考方案1】:

这很可能是因为 SQL Azure 防火墙。您可能必须打开它才能使用它:

https://msdn.microsoft.com/en-us/library/azure/jj553530.aspx

由于您不知道 Android 应用的 IP 地址,我认为选择是:

完全打开防火墙(从 0.0.0.0 开始,到 255.255.255.255 结束) 创建一个您可以从 Android 调用的 WCF 服务并授予该服务对数据库的访问权限,这可能是一个更好的解决方案,因为它也更安全。

【讨论】:

一旦我更改了防火墙,我得到了新的错误..... com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法使用安全套接字层 (SSL) 建立与 SQL Server 的安全连接) 加密。错误:“套接字已关闭”。 ClientConnectionId:ec331467-d01a-46d8-a3f2-db63aefe255f【参考方案2】:

上述解决方案是正确的,这将允许任何设备连接到您的数据库,因为您的套接字关闭错误将其放在您的 connectionurl 末尾并对其进行测试;ssl=request。

也许这可以锻炼。

【讨论】:

以上是关于将 SQL Azure 与 Android 连接起来的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Azure 数据工厂与 SQL 端点而不是交互式集群连接?

使用 SQL 客户端将时间触发的 Azure 函数与数据库连接

将 Xamarin 表单与 Azure SQL 数据库连接

使用 DBContext 将 SQL Server 数据库与时间触发的 Azure 函数连接起来

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

使用 python 将 azure Runbook 与 azure 中的文件共享连接起来