Экспо sqlite использовать существующую базу данных - PullRequest
1 голос
/ 11 апреля 2019

В соответствии с документацией expo sqlite для Reaction-native, я могу инициализировать БД следующим образом:

const db = SQLite.openDatabase('db.db');

Это работает, и я могу обновить БД примерно так:

  update() {
    db.transaction(tx => {
      tx.executeSql(
        `select * from items where done = ?;`,
        [this.props.done ? 1 : 0],
        (_, { rows: { _array } }) => this.setState({ items: _array })
      );
    });
  }

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

У меня есть база данных со всеми необходимыми таблицами, которые уже настроены. Как я могу использовать текущую базу данных, которую я уже настроил?

Например: (неправильный синтаксис)

const db = SQLite.openDatabaseIShipWithApp('mypath/mydb.db');

Я не смог найти никакой документации, которая бы помогла мне с этим. Единственная причина, по которой я упоминаю выше, состоит в том, что у меня уже есть БД с таблицами и данными.

Буду признателен за любую помощь!

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Мне удалось добиться этого с помощью expo's FileSystem.downloadAsync:

сначала я импортирую его, так как использую приложение, управляемое expo:

import { FileSystem } from 'expo';

Затем я скачиваю его с сервера примерно так:

// load DB for expo
FileSystem.downloadAsync(
  'http://example.com/downloads/data.sqlite',
  FileSystem.documentDirectory + 'data.sqlite'
)
.then(({ uri }) => {
  console.log('Finished downloading to ', uri)
})
.catch(error => {
  console.error(error);
})

Первый параметр - это URI для местоположения, второй - где я бы хотел его разместить. Здесь я использую documentDirectory.

0 голосов
/ 01 мая 2019

Я не верю, что это возможно на выставке. Существует способ использовать существующую базу данных, если вы используете голый проект Android, который включает в себя написание некоторого нативного кода для копирования базы данных из ресурсов проекта в стандартное местоположение телефона (/ data / etc) для вашего приложения.

https://medium.com/@johann.pardanaud/ship-an-android-app-with-a-pre-populated-database-cd2b3aa3311f

Я всегда лично создавал базу данных с помощью CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ, поскольку sqlite требует, чтобы вы определили схему, прежде чем запрашивать ее. Если вам нужно заполнить базу данных, за этим шагом последуют дополнительные шаги для вставки необходимых данных.

В большинстве случаев вам также необходимо проверять свои справочные данные и обновлять их с сервера через регулярные промежутки времени (это может даже измениться с публикации вашего apk на кого-то, загружающего приложение), и этот код также будет работать, когда нет справочные данные в базе данных.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...