Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从android中提取Sqlite数据库会产生空数据库_Android_Sqlite_Nativescript - Fatal编程技术网

从android中提取Sqlite数据库会产生空数据库

从android中提取Sqlite数据库会产生空数据库,android,sqlite,nativescript,Android,Sqlite,Nativescript,我正在开发一个使用Sqlite的移动应用程序,我想从手机中提取.db文件,并在Sqlite的db浏览器中查看它 问题来自这样一个事实:当我运行adb命令时,我得到的.db文件是空的,即使我已经创建了表并向数据库中的这些表添加了数据 在应用程序中,我查询数据库中插入的记录,并返回它们。有什么想法吗 adb命令:adb exec out作为projectname cat数据库运行/my.db>my.db 数据库创建代码: if(!Sqlite.exists("my.db")){ ne

我正在开发一个使用Sqlite的移动应用程序,我想从手机中提取.db文件,并在Sqlite的db浏览器中查看它

问题来自这样一个事实:当我运行adb命令时,我得到的.db文件是空的,即使我已经创建了表并向数据库中的这些表添加了数据

在应用程序中,我查询数据库中插入的记录,并返回它们。有什么想法吗

adb命令:
adb exec out作为projectname cat数据库运行/my.db>my.db

数据库创建代码:

if(!Sqlite.exists("my.db")){
        new Sqlite("my.db")
        .then(
            (db) => {
            //create table here
                db.execSQL("CREATE TABLE IF NOT EXISTS Times (Id INTEGER PRIMARY KEY AUTOINCREMENT, clockIn TEXT, clockOut TEXT)")
                .then(
                    () => {
                        console.log("succcess")
                        db.execSQL("INSERT INTO Times (clockIn, clockOut) VALUES (?, ?)", ["Nic", "Raboy"]).then(() => {
                            db.all("SELECT * FROM Times").then((rows) => {
                                console.log(rows)
                            })
                        })

                    }, 
                    (error) => { 
                        console.log('Error occurred creating table');
                    });
        },
            (error) => {
                console.log("Error creating Database");
            });
    }    

我想出了解决这个问题的办法。在Android9上,使用adb拉取时必须包含-wal和-shm文件。然后,当打开.db文件时,您将看到已构建的数据库,而不是空的骨架数据库

这可能不是最好的方法,但它会起作用:

adb exec-out run-as projectname cat databases/my.db > my.db
adb exec-out run-as projectname cat databases/my.db-shm > my.db-shm
adb exec-out run-as projectname cat databases/my.db-wal > my.db-wal

您必须使用
appDatabase.close()
才能使用它


关闭活动的
onStop()
中的db后,从Android Studio中的Android设备文件资源管理器中提取db文件,并使用任何Broswer sqlite查看器查看其中的表。

在我的项目中,如果(!sqlite.exists(“my.db”)它不会干扰我现有的数据库,我没有
。删除此行对您有用吗?我相信新的Sqlite('my.db')将读取数据库(如果存在),并将其引用交给您。您的设备上的操作系统版本是什么?@shawnparar否,运行adb后数据库仍然为空command@ManojAndroid版本9。我正在使用一个模拟器,如果这有什么不同的话。那么它应该可以工作,也许你想尝试一下中的替代命令。你还应该能够通过Android Studio中的设备管理器下载数据库(如果你正在使用的话)。您可以导航到您的设备(可以是模拟器AVD)并搜索应用程序的data/data/[database]文件夹。另一种方法是确保使用完全检查数据库。在这种情况下,-shm和-wal文件将是空的,并且不是必需的。它在Android 9上出现是因为Android 9的默认设置是使用WAL,而不是SQLite默认的日志模式。谢谢,这帮了大忙