从android中提取Sqlite数据库会得到空数据库

时间:2019-05-10 17:25:16

标签: android sqlite nativescript

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

问题来自以下事实:即使我已经创建了表并将数据添加到数据库中的那些表中,当我运行adb命令时,得到的.db文件也为空。

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

adb命令:adb exec-out run-as projectname cat databases/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");
            });
    }    

2 个答案:

答案 0 :(得分:1)

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

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

message(1)

答案 1 :(得分:0)

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

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