Взаимодействие с внешними базами данных SQLite из Android. - PullRequest
3 голосов
/ 21 июля 2009

Я пытаюсь работать с веб-службой (которую я не могу контролировать), которая возвращает базу данных SQLite при запросе. Есть ли способ сделать это?

Ответы [ 2 ]

5 голосов
/ 21 июля 2009

Я работаю над проектом, который делает нечто подобное. Я запрашиваю обновления базы данных и, в зависимости от объема необходимых обновлений, отправляет либо совершенно новую базу данных, либо серию операторов SQL. Я настоятельно рекомендую хранить базы данных на SD-карте, если она доступна, особенно если размер загружаемых баз данных варьируется и превышает несколько килобайт.

Я делаю следующее, чтобы получить файл (измените по вкусу, так как у вас может быть XML для ответа в SOAP-ответе, также игнорируйте прогресс).

fileStream = new FileOutputStream(new File(I-build-my-filename-stuff-above-here));

/* fileData is a byte[8192] */
while((i = httpResponse.read(fileData)) > -1) {
    fileStream.write(fileData, 0, i);

    position += i;

    if (item.getUpdateType() == UpdateItem.FULL_FILE) {
        progress = position / item.getSize();
    } else {
        progress = position / (item.getSize() * 2);
    }

    item.setProgress(progress);
} // end loop through getting http response stream

fileStream.close();
httpResponse.close();

Затем я делаю следующее для доступа к базе данных. Поскольку эти базы данных также используются в приложении для iPhone, они не имеют таблицы для Android, поэтому для доступа к БД необходим флаг SQLiteDatabase.NO_LOCALIZED_COLLATORS. Обратите внимание, что мой класс Database расширяет класс SQLiteOpenHelper:

public Database(Context context, String fileName, String title) {
    super(context, fileName, null, 1);
    this.context = context;
    this.title = title;
    this.fileName = fileName;

    if (fileName != null && fileName.contains("/sdcard")) {
        db = SQLiteDatabase.openDatabase(fileName, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);            
    } else {
        db = getWritableDatabase();
    }

}
0 голосов
/ 21 июля 2009

Если у вас нет выбора формата результата, решение для вас - сохранить файл базы данных в каталоге базы данных вашего приложения в / data / data / package_name / database и после каждого запроса загружать базу данных. файл и запрос результатов.

Вот несколько страниц в базах данных.

  1. http://developer.android.com/guide/topics/data/data-storage.html
  2. http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...