我有一个React Native应用程序,它可以打开与本地数据库的连接。数据库位于assets/www文件夹中,名为OA-DB.db。这是打开数据库连接的常量:
const db = openDatabase({ name: 'OA-DB.db', createFromLocation: 1,}, () => console.log('Connected'), (error) => console.log('Error:' + error));
字符串
此连接在Android 11,Android 13,Android 14设备上运行良好。除了一个特定的设备Android平板电脑与Android 13和三星一个UI 5.1,返回错误,而试图打开连接:错误:无法打开数据库。我尝试了很多方法,将createFromLocation更改为1,禁用了工作帐户,因为打开工作帐户后,它不允许在Android Studio上查看文件。所以现在我可以看到Android Studio的安装文件夹和文件,我可以看到数据库文件夹和其中的数据库文件。有没有人能给予我一些指导?
更新
我已经尝试了更多的东西,我敢肯定数据库是目前在文件夹中,数据库的名称是正确的连接,所以表明该文件是正确的捆绑与应用程序在安装过程中.我在许多设备上安装了这个应用程序,但错误只发生在这个特定的。
更新2
现在我尝试了另一种方法,将数据库复制到设备内的另一个文件夹,使用react-native-fs,我能够将数据库复制到其他文件夹,但仍然无法连接此设备上的数据库。
复制数据库的函数
async function copyDatabaseIfNeeded(){
const dbPath = '/storage/emulated/0/Documents/'+`${dbName}`;
console.log('dbPath:'+dbPath);
console.log('dbLocation:'+dbLocation);
const dbExists = await RNFS.exists(dbPath);
if (!dbExists) {
try {
// Check if external storage permission is granted (only for Android)
if (Platform.OS === 'android') {
const granted = await requestExternalStoragePermission();
if (!granted) {
console.error('Storage permission not granted.');
return;
}
}
// Construct the correct source path for the asset
const sourcePath = Platform.OS === 'android' ? 'www/onlineaudits_new.db' : dbName;
await RNFS.copyFileAssets(sourcePath, dbPath);
console.log('Database copied successfully');
} catch (error) {
console.error('Error copying database:', error);
}
}
}
型
打开连接的功能
// Open the database connection
function openDatabase() {
return new Promise((resolve, reject) => {
SQLite.openDatabase(
{ name: dbName, location: dbLocation },
(db) => {
console.log('Database connection opened successfully');
resolve(db);
},
(error) => {
console.error('Error opening database:', error + dbLocation);
reject(error);
}
);
});
}
型
1条答案
按热度按时间zsohkypk1#
您是否尝试过使用另一个库来连接数据库?