基本的React Native SQLite脚本返回undefined,导致错误

时间:2017-09-28 00:23:09

标签: sqlite react-native

我试图学习如本页所述使用react-native-sqlite-storage:

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

我正在尝试构建一个Android应用程序的Windows机器。我有以下代码:

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");
}

var db = SQLite.openDatabase("test.db", "1.0", "Test Database", 200000, openCB, errorCB);
db.transaction((tx) => {
  tx.executeSql('SELECT * FROM Employees a, Departments b WHERE a.department = b.department_id', [], (tx, results) => {
      console.log("Query completed");

    });
});

export default 1;

当我运行时,我收到错误

  

undefined不是一个对象(评估   ' NativeModules [" SQLite的"] [方法]&#39)

错误发生在var db = SQLite.openDatabase("test.db", "1.0", "Test Database", 200000, openCB, errorCB);

我怀疑错误发生的原因是因为SQLite在实际打开数据库之前需要存在数据库。但是,我没有在上面的链接中看到有关如何使用react-native-sqlite-storage创建数据库的任何说明,因此我不确定我的假设是否正确。此外,我假设我需要为员工提供一个表,但同样,上面的链接并没有明确说明如何创建一个表。所以,我不知道我的假设是否正确。

那么我如何让SQLite.openDatabase()命令工作?

更多信息

我删除了我的项目。然后我尝试再次重新安装所有内容,这次紧跟安德玛的sqlite存储安装说明,如andpor的github指令(即修改gradle文件,更新MainApplication类等等)。一旦我这样做,从CLI运行命令react-native run-android会导致此构建错误:

  

ERROR EPERM:不允许操作,lstat' C:\ Users \ John   赖\项目\ ReactNative \ MYAPP \机器人\应用\构建\中间体\分解-AAR \ MYAPP \境界\未指定\罐子\ classes.jar'   {"错误号": - 4048"代码":" EPERM""系统调用":" LSTAT",& #34;路径":" C:\用户\约翰   赖\项目\ ReactNative \ MYAPP \机器人\应用\构建\中间体\分解-AAR \ MYAPP \境界\未指定\罐子\ classes.jar"}   错误:EPERM:不允许操作,lstat' C:\ Users \ John   赖\项目\ ReactNative \ MYAPP \机器人\应用\构建\中间体\分解-AAR \ MYAPP \境界\未指定\罐子\ classes.jar'       在错误(本机)

我尝试以普通用户和管理员身份运行此命令,但问题仍然存在。

更多信息2

我删除了我的项目。然后我为我的所有项目做了npm install。然后我尝试了命令rnpm linkreact-native link react-native-sqlite-storage,这两个命令都出现了这个错误:

  

ERR!链接时似乎出了问题。错误:生成UNKNOWN   请在此处提出问题:https://github.com/rnpm/rnpm/issues

所以现在这个项目甚至没有建成。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

问题是库没有链接 链接他们建议两种方式

  • with pod(高级)
  • 使用private static PlayerList FindYoungest(List<PlayerList> players) { return players.OrderByDescending(o => o.BirthdayDate).FirstOrDefault(); } (简单)但不推荐使用此命令

所以要链接库你应该使用

rnpm link

此命令等于react-native link react-native-sqlite-storage但不推荐使用

如果自动构建失败,请尝试手动关联iOS manually linking ios和android manually linking android

答案 1 :(得分:0)

由于权限问题或npm版本问题,

lstat命令错误在Windows上生成。

你可以做两件事来传递这个。 1.在管理模式下打开终端。 2.upgrade /降级npm版本

对于插件安装,请手动配置

答案 2 :(得分:0)

您需要使用以下命令更改MainApplication.java:

导入org.pgsqlite.SQLitePluginPackage;

在getPackages中:

新的SQLitePluginPackage()