Как использовать React Native Fetch с React Native SQLite - PullRequest
0 голосов
/ 07 августа 2020

Я новичок в React Native и не понимаю, как использовать эти два пакета вместе!

react-native-sqlite-storage из https://github.com/andpor/react-native-sqlite-storage

и

rn-fetch-blob от https://github.com/joltup/rn-fetch-blob

Мои проблемы заключаются в следующем:

  1. Я не знаю, как преобразовать мои извлеченные файлы csv в sqlite db
  2. Я не Я не знаю, как сделать так, чтобы пакет sqlite-storage читался по указанному c пути

Мне было интересно, может ли мне помочь кто-нибудь, кто имеет опыт работы с этими пакетами! Большое вам спасибо !!!

В настоящее время я беру кучу файлов .csv и помещаю их в папку с именем «all_lists», используя RNFetchBlob.

let response = await RNFetchBlob.config({ trusty: validateCertificate, fileCache: true, appendExt: 'zip'})
                        .fetch('GET', ... )
                        .then((res) => { source = res.path(); console.log('The file saved to ', res.path()) })
                        .catch(async (error) => { console.error(error); });
                
target = source.substring(0, source.lastIndexOf("/") + 1) + 'all_lists';
console.log('this is target folder: ' + target);

//Creates a folder called all_lists
RNFetchBlob.fs
           .mkdir(target)
           .catch((err) => { console.log(err); });

await unzipWithPassword(source, target, cred);

^ Приведенный выше код будет дамп связка файлов .csv по этому пути: /Users/[username]/Library/Developer/CoreSimulator/Devices/61FC6F07-B7D1-42F7-B13A-3D6EA68C2054/data/Containers/Data/Application/48E5B003-4709-4EAB-B7B9-DB2F1E55EA6A/Documents/RNFetchBlob_tmp/all_lists

В настоящее время для запроса SQL у меня есть:

import SQLite from 'react-native-sqlite-storage';

export async function getSQLData() {
  console.log('Opening Database...: ')


  try {

    const db = await new Promise((resolve, reject) => {

      const db = SQLite.openDatabase(
        { name: 'users.db', createFromLocation: 1 },
        () => resolve(db),
        reject
      )
    })

    console.log('Success Opening DB')


    console.log('Executing user query...')

    const results = await new Promise((resolve, reject) => {

      db.transaction(tx => {
        tx.executeSql(
          'SELECT * FROM users',
          [],
          (tx, results) => resolve(results),
          reject
        )
      })
    })

    //Create a local Array
    const localArray = []
    // Go through each item in dataset and push into local Array
    for (let i = 0; i < results.rows.length; i++) {
      localArray.push(results.rows.item(i))
    }
    //Return localArray
    return localArray
    //Catch any errors and return false
  } catch (e) {
    console.log('SQL Error: ', e)
    return false
  }
}

Однако отладчик говорит:

Looking for prepopulated DB at: 
/Users/alanchen/Library/Developer/CoreSimulator/Devices/61FC6F07-B7D1-42F7-B13A-
3D6EA68C2054/data/Containers/Bundle/Application/3F2ECB56-3A6A-42AA-B62E-
C42B6E1BED93/test.app/www/users.db
...