在android手机的应用程序中使用预先构建的数据库

在android手机的应用程序中使用预先构建的数据库,android,database,sqlite,import,Android,Database,Sqlite,Import,我制作了一个android应用程序。我在里面使用数据库。我已经在手机上安装了.apk文件,它工作正常。但它并没有显示我在emulator上时在数据库中输入的任何数据。我需要使用以前填充的数据库表。我的数据库不在运行时创建。我如何才能让手机上的数据库看到应用程序与数据库完美运行?你可以将数据库文件保存在资产或res/raw目录下,在应用程序第一次启动时,将该数据库文件复制到/data/data/com.company.yourap/databases/,然后像往常一样打开数据库 将文件保存在ass

我制作了一个android应用程序。我在里面使用数据库。我已经在手机上安装了.apk文件,它工作正常。但它并没有显示我在emulator上时在数据库中输入的任何数据。我需要使用以前填充的数据库表。我的数据库不在运行时创建。我如何才能让手机上的数据库看到应用程序与数据库完美运行?

你可以将数据库文件保存在
资产
res/raw
目录下,在应用程序第一次启动时,将该数据库文件复制到
/data/data/com.company.yourap/databases/
,然后像往常一样打开数据库


将文件保存在
assets
res/raw
目录下的区别在于
res/raw
下的文件被压缩,而
assets
下的文件不被压缩。在Android 2.3之前,
res/raw
下的文件不能超过1MB。因此,我建议您自己压缩数据库文件,并将其保存到
资产
,然后在代码中使用
gzip输入流

解压文件。如果您需要将数据库放在应用程序之外进行测试,那么我认为您应该将其导出到SD卡中

public static void exportfile(String applicationPackageName,String databaseName,String pathOfFolder) throws FileNotFoundException, IOException
    {
                InputStream myInput;

                myInput = new FileInputStream("/data/data/"+applicationPackageName+"/databases/"+databaseName);

                File directory = new File("/sdcard"+pathOfFolder);

                if (!directory.exists()) 
                {
                    directory.mkdirs();
                } 

                OutputStream myOutput = new FileOutputStream(directory.getPath()+"/"+databaseName);

                byte[] buffer = new byte[1024];
                int length;
                while ((length = myInput.read(buffer))>0)
                {
                    myOutput.write(buffer, 0, length);
                }

                myOutput.flush();
                myOutput.close();
                myInput.close();

    }
applicationPackageName:-应用程序包名称

数据库名称:-数据库文件名

PathFolder:-要在SD卡中导出文件的文件夹路径

不要忘记在清单文件中添加

并下载任何SQLite管理器以打开该文件


谢谢。。希望对您有所帮助。

有关于如何复制现有数据库文件的指南吗?