【发布时间】: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