2

我正在开发一个应用程序,在其中插入一些值到本地 sqlite 数据库中。它在本地模拟器和平板电脑上运行良好。插入值后,我想获取 sqlite 数据库。我能够从 Emulator 获取数据库,但不幸的是无法从 Android Tablet 获取 sqlite 数据库。请建议从真实设备(平板电脑)获取数据库的程序是什么。

谢谢。

4

5 回答 5

2

谢谢大家

最后我得到了一个合适的解决方案。我们无法从任何(三星)平板电脑获取 db,但我们可以复制其数据并拉取到我们的 PC。

public void copyDataBase() {
        Log.i("info", "in copy data base at finally");
        try {
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();
            if (sd.canWrite()) {
                String currentDBPath = "/data/" + context.getPackageName()
                        + "/databases/DB_29Apr.sqlite";
                String backupDBPath = "DB_29Apr.sqlite";
                File currentDB = new File(data, currentDBPath);
                File backupDB = new File(sd, backupDBPath);
                if (currentDB.exists()) {
                    FileChannel src = new FileInputStream(currentDB)
                            .getChannel();
                    FileChannel dst = new FileOutputStream(backupDB)
                            .getChannel();
                    dst.transferFrom(src, 0, src.size());
                    src.close();
                    dst.close();
                }
            }
        } catch (Exception e) {
            Log.i("info", "in copy of bata base 10 ");

        }
    }

通过上述功能,您可以将数据库复制到平板电脑的外部空间。

转到 DDMS 并在平板电脑的存储位置的 db 中找到具有给定名称的已定义数据库。

于 2013-04-12T12:23:11.300 回答
1

在您的平板电脑 SD 卡中手动创建一个名为 database 的文件夹。然后运行您的应用程序,然后打开数据库文件夹以获取 .db 文件。

于 2012-12-27T10:07:31.550 回答
1

您必须从FileExplorer中选择它 mnt---> sdcard---> your DB_NAME

于 2012-12-27T10:09:07.373 回答
1

仅供参考,出于安全目的,在平板电脑设备中,它不允许找到您的 .db 文件。如果您使用的是模拟器,那么您有权访问数据库的位置[目录]。

这是最终答案。

谢谢

于 2012-12-27T10:11:35.130 回答
1

原因你不能,因为它会在以下位置创建,比如

/data/data/<your root package name in android manifest file>/databases/< you database name>

只能由您的应用程序访问,因此只需将您的文件从上述位置复制到 sd 卡位置以编程方式使用以下功能可能有助于复制流

public static void CopyStream(InputStream is, OutputStream os) {
    final int buffer_size = 1024;
    try {
        byte[] bytes = new byte[buffer_size];
        for (;;) {
            int count = is.read(bytes, 0, buffer_size);
            if (count == -1)
                break;
            os.write(bytes, 0, count);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
于 2012-12-27T11:24:38.157 回答