SQLITE_CANTOPEN - nodejs-mobile - PullRequest
       23

SQLITE_CANTOPEN - nodejs-mobile

0 голосов
/ 14 июня 2019

Ошибка: SQLITE_CANTOPEN

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('MyDB.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);
db.serialize(function() {
  db.run("CREATE TABLE lorem (info TEXT)");

  var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
  for (var i = 0; i < 10; i++) {
      stmt.run("Ipsum " + i);
  }
  stmt.finalize();

  db.all("SELECT rowid AS id, info FROM lorem", function(err, rows) {
    rn_bridge.channel.send(rows);
  });

});

Я запускаю это в контексте: https://github.com/janeasystems/nodejs-mobile реагировать родной

выполнение этого без rn_bridge.channel.send (rows) и console.log в контексте node.js node index.js работает нормально.

1 Ответ

0 голосов
/ 19 июля 2019

Вероятно, проблема заключается в том, что sqlite3 для этого внутренне использует Текущий рабочий каталог, который не может быть записан в приложениях iOS / Android.

Использование rn_bridge.app.datadir() API было бы способом иметь доступное для записи местоположение. https://github.com/JaneaSystems/nodejs-mobile-react-native/tree/49c069539db138688a9e44c44180bb0c3335537c#rn_bridgeappdatadir

Примерно так можно было бы сделать это:

const path = require('path');
var sqlite3 = require('sqlite3').verbose();
var db_path= path.join(cordova.app.datadir(), 'MyDB.db');
var db = new sqlite3.Database(db_path, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);
...