【问题标题】:Migrate Appcelerator App to React Native maintain SQLite database迁移 Appcelerator App 到 React Native 维护 SQLite 数据库
【发布时间】:2019-12-16 00:54:44
【问题描述】:

并没有真正“迁移”我们的应用程序本身,但实际上我们正在使用 React Native 从头开始​​构建一个新版本。 我们将使用相同的 BundleID 等,以便此更新仅安装在最后一个应用程序的顶部。

不过,我们想做的是访问 Appcelerator 项目中存在的 SQLite 数据库。

从阅读几篇文章看来应该是可能的,但是每次我将我的新应用程序连接到模拟器或使用 Ad Hoc build 从以前的版本更新时,数据库似乎是空的。

database.js

import SQLite from 'react-native-sqlite-storage';
SQLite.DEBUG(true);
SQLite.enablePromise(true);

export default class DbTest {
  static listTables(callback) {
    const errorCB = err => {
      console.log('SQL Error: ' + err);
    };

    return SQLite.openDatabase({name: '_alloy_'}, callback, errorCB);
  }
}

App.js

  saveToState(db) {
    db.transaction(tx => {
      tx.executeSql('select * from sqlite_master', [], (_, results) => {
        console.log('Query completed', results);

        this.setState(previousState => ({results}));

        // Get rows with Web SQL Database spec compliance.
      });
    });
  }

  componentDidMount() {
    DbTest.listTables(this.saveToState);
  }

如果我注销其中的结果,我会得到

 LOG  Query completed {"insertId": undefined, "rows": {"item": [Function item], "length": 0, "raw": [Function raw]}, "rowsAffected": 0}
 LOG  SQLite.backgroundExecuteSqlBatch({"dbargs":{"dbname":"_alloy_"},"executes":[{"qid":1111,"sql":"COMMIT","params":[]}]})
 LOG  SQLite.backgroundExecuteSqlBatch({"dbargs":{"dbname":"_alloy_"},"executes":[{"qid":1111,"sql":"BEGIN","params":[]},{"qid":1111,"sql":"select * from sqlite_master","params":[]}]})

如果有人有任何经验或可以指出我的文章,我将非常感激。

谢谢。

【问题讨论】:

  • 你确定数据库里面有数据吗?需要链接现有数据库,然后 告诉 react-native-sqlite-storage 在哪里可以找到并打开它。
  • @ChristosLytras 我确信在安装 appcelerator 应用程序时数据库内部有数据。 “链接”是什么意思?这可能是我缺少的东西。
  • 您需要将SQLite数据库文件添加到您的项目中,然后在打开数据库SQLite.openDatabase({ name : "testDB", createFromLocation : "/data/mydbfile.sqlite"})时使用createFromLocation属性。请参阅Importing a pre-populated database 部分。

标签: sqlite react-native appcelerator


【解决方案1】:

在模拟器或设备上运行您的 Appcelerator 应用。然后使用 Finder 获取“alloy”数据库并将其放入您的 React 项目中。我一直使用 DB Browser for SQLite 打开并查询在模拟器上安装应用程序时创建的数据库。

【讨论】:

  • 如果我们有一个对每个用户都相同的数据库,例如参考数据或其他东西,我可以理解这一点。但是这个数据库保存了偏好等,每个用户数据库都包含唯一的数据。我们是说现在无法访问吗?还是我错过了什么?谢谢!
  • 您是否要在同一部手机上安装两个应用程序? React 中的一个访问 Appcelerator 数据库?
  • 不,新的 React Native 应用程序。使用与旧 Appcelerator 项目相同的名称和 bundleID。新版本号。希望用户只会自动更新并让新应用程序替换旧应用程序。尝试访问旧 Appcelerator 项目正在使用的 SQLite 数据库,但可以从新版本的应用程序(将使用 React Native 构建)访问用户保存在其中的数据。所以可能是 Appcelerator 没有将 SQLite db 文件保存在标准位置,所以当我尝试在 RN 中访问它时找不到它。我会调查这个
  • 现在我明白你要做什么了!我很想看到你解决这个问题。您可以尝试一些想法。 a) 确保您首先在模拟器上运行旧应用程序并使用一些数据。第一次向 Alloy 模型添加数据时,会创建名为 alloy.sql 的数据库文件,并添加表和记录。 b) 将 React openDatabase 文件名更改为“alloy.sql” c) 将数据库“location”参数添加到您的 React openDatabase 调用中。使用“库”或“文档”。 npmjs.com/package/…
猜你喜欢
  • 2021-09-21
  • 2016-09-04
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2013-10-09
  • 2015-11-21
相关资源
最近更新 更多