gpt4 book ai didi

sqlite - 没有这样的表 - Expo 中的 SQLite react 原生项目

转载 作者:行者123 更新时间:2023-12-04 17:30:40 26 4
gpt4 key购买 nike

我想在我的 Expo react native 项目中使用 SQLite。所以我下载了 SQLite 的数据库浏览器,并在将它们加载到我的项目之前创建了数据库和表。

现在我有了要加载到我的项目中的预填充数据库。我有几个问题,比如这个数据库不存在......等等。但是我通过使用数据库模块解决了它:

// Database.js
import * as SQLite from 'expo-sqlite';

module.exports = SQLite.openDatabase('myDb.db');

然后将其导入我的主页屏幕文件夹中:
import Database from '../db/database';

function myFunction(){
console.log("Enter Function");
console.log(Database);
Database.transaction(function(txn) {
console.log("Enter Transaction");
txn.executeSql(
"INSERT INTO users (name, email, password) VALUES ('Lama', 'lama@gmail,com', 'lam123');",
); //end txn
}, function (error){
console.log(error);
},
function(){
console.log("Success");
});

}//end myFunction()

控制台日志:
Enter Function
WebSQLDatabase {
"_currentTask": null,
"_db": SQLiteDatabase {
"_closed": false,
"_name": "myDb.db",
},
"_running": false,
"_txnQueue": Queue {
"length": 0,
},
"exec": [Function anonymous],
"version": "1.0",
}
Enter Transaction
Error code 1: no such table: users
- node_modules/expo-sqlite/build/SQLite.js:36:15 in _deserializeResultSet
* [native code]:null in map
- node_modules/expo-sqlite/build/SQLite.js:16:40 in SQLiteDatabase#exec
- node_modules/promise/setimmediate/core.js:37:14 in tryCallOne
- node_modules/promise/setimmediate/core.js:123:25 in setImmediate$argument_0
- node_modules/react-native/Libraries/Core/Timers/JSTimers.js:146:14 in _callTimer
- node_modules/react-native/Libraries/Core/Timers/JSTimers.js:194:17 in _callImmediatesPass
- node_modules/react-native/Libraries/Core/Timers/JSTimers.js:458:30 in callImmediates
* [native code]:null in callImmediates
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:407:6 in __callImmediates
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:143:6 in __guard$argument_0
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:384:10 in __guard
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:142:17 in __guard$argument_0
* [native code]:null in flushedQueue
* [native code]:null in invokeCallbackAndReturnFlushedQueue

我真的不知道我在这里遗漏了什么,我尝试了创建另一个数据库的代码,它可以工作并添加记录(尽管我在笔记本电脑中找不到数据库的位置)。我还尝试将一条记录从数据库浏览器添加到 myDb 并且它有效:
DB browser for SQLite - users table records

我发现之前问过这个问题,但没有帮助的答案:
SQLite Expo API, no such table in pre-populated file?

先感谢您!

最佳答案

我猜可能是

SQLite.openDatabase('myDb.db');

正在打开一个名为 myDb.db 的数据库,该数据库位于路径下的应用程序文件系统中: ${FileSystem.documentDirectory}SQLite/myDb.db .
因此,如果没有名为“myDB.db”的文件,sqlite 将创建一个同名的新数据库,
这就是为什么您无法在新创建的数据库中找到表用户的原因。

因此,为了确保您填充的数据库位于正确的路径中,您需要使用 FileSytem 将其下载到您的应用程序中。 ,

所以你可能需要做这样的事情:
FileSystem.downloadAsync(
Asset.fromModule(require(path)).uri,
`${FileSystem.documentDirectory}SQLite/myDb.db`
)
.then(function(){



var db = SQLite.openDatabase('db.db')

// do whatever else you need here


})
.catch(error =>{
console.error(error)
})

关于sqlite - 没有这样的表 - Expo 中的 SQLite react 原生项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com