0

10MBを超えるデータベースをインポートしたいのですが。インターネットで解決策が見つかりませんでした...さらに、このDBを最終的なAPKに挿入したいと思います。あなたはなにか考えはありますか ?

英語でごめんなさい。私はフランス人です

4

3 に答える 3

1

基本的に、同様のデータベースに対して一度行ったことは、ここで説明したことでした。データベースを作成し、assetsフォルダーに配置します。次にSQLiteOpenHelper、アプリケーション データベースが存在する場所 (つまり、プライベート アプリケーション ストレージ) にコピーします。

ただし、大きなファイルの場合、ここで説明するように、データベース ファイルをいくつかのファイルに分割する必要がありました。これは、1 MB を超えるファイルをassetsフォルダーから読み取ることができないためです。ただし、もちろん、apk が非常に大きくなることに注意する必要があります。

于 2012-04-27T07:39:36.570 に答える
0

次のいずれかを行う必要があると思います。

  1. アプリケーションがインストールされたときにこの機能を実行するように、insert ステートメントをアプリケーションにハードコーディングします。
  2. Web 上で DB をホストし、アプリでデータをその DB にプルします。
  3. Web 上で DB をホストし、アプリが必要なデータのみを取得するようにします。その後、アプリケーション データベースに保存することができます (これが私のソリューションの最良のソリューションだと思います)。
于 2012-04-27T07:35:18.997 に答える
-1

ZipInputStream を使用して大きなファイルを処理できます。zip util を使用して、ファイルをプロジェクトのアセット フォルダーに圧縮します。

InputStream dataSource = getAssets().open("assets.zip");
unzip(dataSource, MainTab1Activity.defaultDBPath);

public static void unzip(InputStream zipFileName, String outputDirectory) {
        try {
            ZipInputStream in = new ZipInputStream(zipFileName);
            // 获取ZipInputStream中的ZipEntry条目,一个zip文件中可能包含多个ZipEntry,
            // 当getNextEntry方法的返回值为null,则代表ZipInputStream中没有下一个ZipEntry,
            // 输入流读取完成;
            ZipEntry entry = in.getNextEntry();
            while (entry != null) {

                // 创建以zip包文件名为目录名的根目录
                File file = new File(outputDirectory);
                file.mkdir();
                System.out.println("file.mkdir()");
                if (entry.isDirectory()) {
                    String name = entry.getName();
                    name = name.substring(0, name.length() - 1);

                    file = new File(outputDirectory + File.separator + name);
                    file.mkdir();

                } else {
                    file = new File(outputDirectory + File.separator + entry.getName());
                    file.createNewFile();

                    FileOutputStream resultFileOutput = new FileOutputStream(file);
                    byte[] buf = new byte[1024 * 1024];// 设定缓冲区大小
                    int bsize = 0;
                    while ((bsize = in.read(buf)) != -1) {
                        resultFileOutput.write(buf, 0, bsize);
                    }
                    //in.close();
                    resultFileOutput.close();
                    System.gc();


//                    FileOutputStream out = new FileOutputStream(file);
//                    int b;
//                    while ((b = in.read()) != -1) {
//                        out.write(b);
//                    }
//                    out.close();
                }
                // 读取下一个ZipEntry
                entry = in.getNextEntry();
            }
            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
    }
于 2012-04-27T07:35:34.073 に答える