2012-05-21 3 views
6

Могу ли я получить доступ к удаленной базе данных SQL (на веб-сервере) непосредственно из программы Android? т.е. просто открыть соединение со всеми необходимыми параметрами, а затем выполнить SQL-запрос?Доступ Android к удаленной базе данных SQL

Это частная программа (недоступная для общественности), доступная только на указанных телефонах, поэтому я не беспокоюсь о том, что третьи стороны получают доступ к базе данных.

Если это так - какие библиотеки мне нужны в Java?

Спасибо.

ответ

18

Этот вопрос появился несколько раз. Вы PROBABLY можете напрямую подключить ваше устройство Android к серверу SQL, если вы развернули драйверы MSSQL JDBC на свое устройство Android и затем открыли свой SQL-сервер непосредственно в Интернете. Если драйверы MSSQL будут корректно работать на Android, это совершенно другая проблема.

Так вы могли бы это сделать. Однако вот почему это плохая идея.

  1. Вы подвергаете свой SQL-сервер непосредственно в Интернете. Если вы не зашифруете данные между вашим сервером MSSQL и устройством Android, для определенного хакера достаточно будет обнюхать поток данных TDS между устройством и MSSQL и перепроектировать его и украсть ваши данные. Шифрование, вероятно, значительно затруднит атакующему кражу ваших данных. Однако злоумышленник может запустить атаку DOS/DDOS непосредственно в вашей базе данных. Неплохая идея!

  2. Если вы планируете подключать другие мобильные устройства (iPhone, Symbian, BlackBerry и т. Д.), Вам также необходимо будет создать SQL-соединение с этих устройств. Например, iPhone не поддерживает Java изначально (из моей памяти), поэтому вам нужно будет найти способ подключения iPhone к SQL-серверу. BlackBerry может быть проще, но с Symbian вам не повезет. Таким образом, вам нужно будет создать собственное решение для каждого устройства, подключающегося к вашей базе данных. плохая идея НАГРУЗКИ обеспечения

Создание веб-сервиса или пользовательских TCP/IP сервер, который может управлять базой данных. Подключитесь к этому веб-сервису/сервису с вашего устройства. Веб-сервисы - это путь. Более 90% устройств в наши дни способны выполнять вызов webservice.

+0

Brilliant, спасибо. – WaterBoy

+0

@ dcaswell Спасибо, что выбрали это, и выяснили, что это немного больше. – Namphibian

4

Я думаю, вам нужно использовать webservice для связи с базой данных SQL. вы можете определять общие методы, такие как runSomeScalarQuery или runOneTabularQuery и ... в этом веб-сервисе, и отправлять ответы базы данных через собственный определенный протокол, например, самоопределяемый объект.

0

Это очень плохая практика, но если вам это нужно для тестирования, или поскольку у вас нет другого варианта, все равно можно подключиться к внешней базе данных. И в большинстве случаев это будет нормально работать, если доступ к данным не слишком тяжелый.

  • Скачать драйвер отсюда: http://dev.mysql.com/downloads/connector/j/3.0.html (есть некоторые более новые, но это один работает отлично)
  • если ваш проект оленья кожа есть папка «Libs», создайте его сейчас.
  • распакуйте файл, который вы загрузили, и скопируйте файл mysql-connector-java-3.0.17-ga-bin.баночка в папку ЛИЭС
  • добавить его в путь сборки:
    • Щелкните правой кнопкой мыши на проекте> Build Path> Configure Build Path
    • Tab Библиотеки> Добавить JAR
    • Просмотр в ЛИЭС папку и выберите файл фляги
  • Как только это будет готово, мы сможем продолжить программирование. Как известно, Android заставляет нас делать доступ к сети в отдельном потоке, поэтому мы должны выбрать способ создания потока, например, мы можем использовать AsynkTask и добавить наш код в метод doInBackground.

    private static final String url = "jdbc:mysql://{URL_SERVER}/{BASE_DATOS}"; 
    private static final String user = "usuario"; 
    private static final String password = "contraseña"; 
    int count=0; 
    try { 
        // The newInstance() call is a work around for some broken Java implementations 
        //this creates some static objects that we need. 
        Class.forName("com.mysql.jdbc.Driver").newInstance(); 
        Connection con = DriverManager.getConnection(url, user, password); 
        Statement st = con.createStatement(); 
        ResultSet rs = st.executeQuery("QUERY"); 
        while (rs.next()) { 
          //in every iteration we have a result 
          //if query is a Select, for instance 
          //"select one_column, another_column from ..." 
          //remember that rs has functions such as 
          //rs.getString(0) 
          //rs.getDouble(1) 
          //etc, that get the index of the columns in the select 
          //and cast it to the specific type 
    
          //here we do whatever we need with the results, 
          //and probably keep track of the progress with something like 
         // publishProgress(++count); 
    
          // end early if asynctask was cancel() 
          if (isCancelled()) 
         break; 
    
        } 
    } 
    
    catch (Exception e) { 
    e.printStackTrace(); 
    } 
    
Смежные вопросы