Android Studio Expo SQLite数据库物理存储访问

5anewei6  于 2023-03-19  发布在  Android
关注(0)|答案(3)|浏览(102)

我正在expo CLI下使用React-Native开发一个android应用程序。我正在尝试使用“expo-sqlite”库创建和写入数据库。我的测试环境是我的android手机,通过扫描浏览器上metro包中显示的QR条形码来使用Expo应用程序。
我的代码如下所示:

OnClick = () => {
 let db = SQLite.openDatabase('testdb', 'version1')
 let str = 'CREATE TABLE contacts (    contact_id INTEGER PRIMARY KEY,    first_name TEXT NOT NULL,    
            last_name TEXT NOT NULL,    email TEXT NOT NULL UNIQUE,    phone TEXT NOT NULL UNIQUE);'
  db.transaction((txn) => {
  txn.executeSql(str, [],
  (txn, rs) => console.log('successfull'),
  (error) => console.log(error)) }) }

因此,上述查询执行成功;我认为数据库已实际创建。我想访问在我的设备上创建的物理数据库文件。
有些帖子说数据库文件位于data/exp.exponent/files下,但是这个目录是空的。我尝试记录console.log(FileSystem.documentDirectory),它指向file:///data/user/0/host.exp.exponent/files/ExperienceData/%2540anonymous%252FMyProject-195b03bc-663c-49e9-aac3-2d9bdf0a3d37/;但是我在手机上找不到路径。
感谢你的帮助。

mwg9r5ms

mwg9r5ms1#

我找到了一种方法,使用expo共享库将DB文件传输到我的PC上。首先做一些导入:

import * as Sharing from 'expo-sharing';
import * as FileSystem from 'expo-file-system';

下面的代码将打开一个共享窗口,你可以通过whatsapp或outlook共享你的数据库,这样你就可以通过whatsapp web下载文件并查看你的数据库中发生了什么。

await Sharing.shareAsync(
   FileSystem.documentDirectory + 'SQLite/main', 
   {dialogTitle: 'share or copy your DB via'}
).catch(error =>{
   console.log(error);
})
ix0qys7i

ix0qys7i2#

经过大量的研究,我发现以下几点:

1- Import FileSystem from 'expo-file-system'; default saving location is : 
   FileSystem.documentDirectory + 'SQLite/databasename' 
2- There is no convenient way to access the database file in the path stated in point 
   1(unless your Android device is rooted); however, a turnaround consists of using the MediaLibrary module, and saving 
   the database file to DCIM folder (Android).
h43kikqp

h43kikqp3#

这就是我最终想明白的:
FYI我正在使用iOS模拟器。
我在努力找世博会创建数据库的文件夹。
1.我安装了文件系统包npx expo install expo-file-system
1.然后我想看看FileSystem.documentDirectory会注销什么,因为我不知道expo把我的东西放在哪里。
因此,我只创建了一个按钮,并在onClick上记录了它返回的值

FileSystemPath = async () => {
    console.log(FileSystem.documentDirectory)   
}

1.在我的终端导航到路径。它应该看起来像
~/Library/Developer/CoreSimulator/Devices/AF763EBC-48F3-4238-A1E5-0DB2B43359D0/data/Containers/Data/Application/115EEA6B-5A65-47DE-96F9-1A4126EB2F2D/Documents/ExponentExperienceData
1.在我进入/ExponentExperienceData后,我用open .在Finder中打开了它
1.然后我可以看到2个目录。其中一个是SQLite文件夹,里面是我的数据库。然后简单地用任何读取.db文件的应用程序打开文件(在我的情况下是TablePlus)。
仅供参考我的数据库是用

const db = SQLite.openDatabase('myDabaseName.db')

没别的了。
希望这能对人有所帮助干杯

相关问题