在react-native中打开预填充的SQLite数据库,将数据库放在哪里?

spi*_*ght 6 sqlite ios react-native

我正在遵循有关将现有数据库导入到我的应用程序(用于IOS)的说明:https : //www.npmjs.com/package/react-native-sqlite

在myProject目录中创建了www文件夹,并放置了myDataBase。
将文件夹添加到xcode。

这是我的src代码来打开它并进行查询:

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

function errorCB(err) {
  console.log("SQL Error: " + err);
}

function successCB() {
  console.log("SQL executed fine");
}

function openCB() {
  console.log("Database OPENED");
}

console.log('database.js')

var db = null;

export function openDB() {
// var db = SQLite.openDatabase("test.db", "1.0", "Test Database", 200000, openCB, errorCB);
db = SQLite.openDatabase({name : "words", createFromLocation : 1}, openCB,errorCB);

}

export function getWord(str) {
  db.transaction((tx) => {
    tx.executeSql("SELECT * FROM words", [], (tx, results) => {
        console.log("Query completed");

        // Get rows with Web SQL Database spec compliance.

        var len = results.rows.length;
        console.log('len' + len)
        for (let i = 0; i < len; i++) {
          let row = results.rows.item(i);
          console.log(`word: ${row.str}, Dept Name: ${row.smth}`);
        }

        // Alternatively, you can use the non-standard raw method.

        /*
          let rows = results.rows.raw(); // shallow copy of rows Array

          rows.map(row => console.log(`Employee name: ${row.name}, Dept Name: ${row.deptName}`));
        */
      });
  });
}
Run Code Online (Sandbox Code Playgroud)

我正进入(状态:

Built path to pre-populated DB asset from app bundle www subdirectory: /Users/mac/Library/Developer/CoreSimulator/Devices/06420F74-0E1C-47C1-BCAC-5D3574577349/data/Containers/Bundle/Application/75EE8E9A-276F-402F-982A-DBF30DE80802/MyApp.app/www/words
RCTLog.js:48 target database location: nosync
RCTLog.js:48 Opening db in mode READ_WRITE, full path: /Users/mac/Library/Developer/CoreSimulator/Devices/06420F74-0E1C-47C1-BCAC-5D3574577349/data/Containers/Data/Application/67D2451F-3D72-4B82-AC90-AD6DB9A82566/Library/LocalDatabase/words

Database opened
RCTLog.js:48 Good news: SQLite is thread safe!
dataBase.js:13 Database OPENED
RCTLog.js:48 open cb finished ok
sqlite.core.js:475 Error handler not provided:  {message: "no such table: words", code: 5}
sqlite.core.js:572 warning - exception while invoking a callback: {"code":5}
Run Code Online (Sandbox Code Playgroud)

不知道此错误的原因是什么?
我已经在数据库浏览器中检查了SQLite,该数据库是正确的,并且其中存在表'words'并具有行。
我尝试过为db文件使用不同的名称:“ words”,“ words.db”,“ words.sqlite”没有帮助。

我从控制台以以下方式运行我的应用程序:

react-native run-ios
Run Code Online (Sandbox Code Playgroud)

小智 1

SQLite.openDatabase({name:"testDB.sqlite3", createFromLocation:1,location:'Library'})
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。testDB.sqlite3文件大小为 24 MB。 testDB.sqlite不是testDB.db在工作,而是testDB.sqlite3在工作。