Как получить данные SQL Azure в виде списка? - PullRequest
0 голосов
/ 02 июля 2011
String[] items = new String[10];
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create a variable for the connection string.
      String connectionUrl = "jdbc:sqlserver://servername.database.windows.net;" +
          "databaseName=School;user=username@servername;password=userpassword"; 

      // Declare the JDBC objects.
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;

    setListAdapter(new ArrayAdapter<String>(this,
                                            android.R.layout.list_item,
                                            new ArrayList()));

    new AddStringTask().execute();

    try {
         // Establish the connection.
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         con = DriverManager.getConnection(connectionUrl);

         // Create and execute an SQL statement that returns some data.
         String SQL = "SELECT TOP 10 * FROM dbo.tbl";
         stmt = con.createStatement();
         rs = stmt.executeQuery(SQL);

         // Iterate through the data in the result set and display it.
         while (rs.next()) {
                String items = rs.getArray(2) + " " + rs.getArray(3);
         }
      }

      // Handle any errors that may have occurred.
      catch (Exception e) {
         e.printStackTrace();
      }
      finally {
         if (rs != null) try { rs.close(); } catch(Exception e) {}
         if (stmt != null) try { stmt.close(); } catch(Exception e) {}
         if (con != null) try { con.close(); } catch(Exception e) {}
      }
}

class AddStringTask extends AsyncTask<Void, String, Void> {
    @Override
    protected Void doInBackground(Void... unused) {

        return(null);
    }

    @Override
    protected void onProgressUpdate(String... item) {
        ((ArrayAdapter)getListAdapter()).add(item[0]);
    }

    @Override
    protected void onPostExecute(Void unused) {
        Toast
            .makeText(AsyncDemo.this, "Done!", Toast.LENGTH_SHORT)
            .show();
    }
}

В цикле while внутри onCreate я хотел бы получить 10 строк и 2 столбца из таблицы в удаленной базе данных, которая является sql azure, а затем сохранить ее в строковом массиве.Затем этот массив строк выводится пользователю в виде списка.Ссылка для скачивания драйвера JDBC min.bz / wC4Am (Пользователи, не использующие Windows, получают сжатый файл. Последний в списке) Также обновлена ​​ссылка.

Ответы [ 2 ]

1 голос
/ 02 июля 2011

Android-Java-SQLAzure хорошая комбинация, поздравляю!

С другой стороны, почему вы обращаетесь к базе данных (SQL Azure) напрямую из мобильного приложения? Это имеет несколько недостатков:

  • В мобильное приложение необходимо включить адаптер SQL Server и библиотеки JDBC, размер которого должен составлять не менее 1 МБ.
  • Пользователи вашего приложения смогут увидеть пароль к вашей базе данных с помощью нескольких хитростей. Это большая уязвимость безопасности для вашей системы! Пользователи могут даже отказаться от ваших таблиц.
  • Мобильным приложениям (особенно Android) не следует отдавать предпочтение непосредственному потреблению базы данных (так как политика цикла активности Android позволяет приложениям приостанавливаться на некоторое время, а соединение с базой данных может быть прервано в это время, и по этой причине вы получаете различные неожиданные исключения). .

Поэтому вы должны создать веб-сервис или REST API с Java или ASP.NET, который вы можете выполнять ваши запросы через этот прокси и возвращать результаты обратно в JSON, или XML или хороший формат, который Java может легко анализировать и адаптировать. ваш ArrayAdapter.

0 голосов
/ 09 ноября 2011

Подробнее о наборе инструментов Microsoft Azure для Android можно найти здесь:

http://www.wadewegner.com/2011/08/windows-azure-toolkits-for-devices-now-with-android/ http://social.technet.microsoft.com/wiki/contents/articles/4598.aspx

...