2012-03-21 5 views
1

Я пытаюсь подключиться к SQL Azure из своего приложения для Android. Код отлично работает для Java-приложения, где мне удалось получить данные из SQL Azure, но он вызывает ошибку для моего Android. Ниже приведен код и сообщение об ошибке.
Код:Подключение SQL Azure с Android

String connectionString = 
        "jdbc:sqlserver://serversql.database.windows.net:1433" + ";" + 
       "database=dbname " + ";" + 
       "[email protected]" + ";" + 
       "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.". 
+2

В качестве побочного примечания, если это будет приложение Android для массового распространения, вы действительно не должны устанавливать соединение с базой данных SQL Azure (или любым хранилищем данных) в самом приложении. Это ставит ключи в это царство в руки любого, у кого есть аппликация. Вместо этого вы должны использовать службу данных, расположенную непосредственно рядом с данными, для обработки любых запросов данных. Это не только защищает базу данных от неконтролируемого, неконтролируемого доступа, но и дает возможность реализовать такие функции, как кеширование данных, которые помогут вам увеличить масштаб по мере увеличения спроса на услугу. – BrentDaCodeMonkey

+0

@BrentDaCodeMonkey спасибо за информацию .. Я прочитал статью после того, как поставил вопрос, где они предлагают использовать WEB-СЕРВИС ... –

+0

Именно это я и сделаю chinna. :) – BrentDaCodeMonkey

ответ

0

Скорее всего, это из-за брандмауэра SQL Azure. Вы, вероятно, придется открыть, что для его использования:

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

Поскольку вы не знаете IP-адреса Android приложений, я думаю, что выборы являются:

  • Open брандмауэр полностью (начать с 0.0.0.0 на 255.255.255.255)
  • Создайте службу WCF, которую вы можете позвонить с Android и предоставить доступ к базе данных, это, вероятно, лучшее решение, так как оно также более безопасно.
+0

Как только я изменил брандмауэр, я получил новую ошибку ..... com.microsoft.sqlserver.jdbc.SQLServerException: драйвер не смог установить безопасное соединение с SQL Server с помощью шифрования Secure Sockets Layer (SSL). Ошибка: «Гнездо закрыто». ClientConnectionId: ec331467-D01A-46d8-a3f2-db63aefe255f –

Смежные вопросы