なぜする
..あなたがコピーされたSQLiteのデータベースファイルを開いていることを確認しデータベースファイルを直接data/dataフォルダに入れたいのですか?テスト目的のために?私には分かりませんが、私は以下のいずれかのオプションを選択します:
- サーバーからデータをロードし、データベースに挿入します。
- assetsフォルダーにデータベースファイルを格納し、バイトをコピーしてappデータベースを作成します(データベースファイルを移動することはできません)。 (要求された通り)
例:
まずあなたは資産/データベースフォルダ内のデータベースファイルを配置する必要があります。あなたのデータベースが1MBより大きい場合は、それを分割する必要があります。 (つまり、データベース1、データベース2、データベース3 ...)
ここでは、すべてのデータベースタスクを実行するクラスがあります。ここでは、DatabaseHelper(SQLiteOpenHelperを拡張)というクラスがあります。データベースのパスと名前を設定することを忘れないでください。
private static String DB_PATH = "/data/data/com.example/databases/";
private static String DB_NAME = "mydb.sqlite";
あなたのデータベースを分割しなければならないとしたら、あまりにも変数に作品を宣言します。
private static String[] sFiles = {'database1','database2','database3'};
getReadableDatabase()メソッドを使用すると、すぐにデータベースを作成/開くことができます。最終的にはそれが働いているの返信用
private void copyDatabase() throws IOException {
// Path to the empty database.
String outFilename = DB_PATH + DB_NAME;
// Open the empty database as the output stream.
OutputStream outputDatabase = new FileOutputStream(outFilename);
// Transfer bytes from the input file to the output file.
byte[] buffer = new byte[1024];
for (int i = 0; i < sFiles.length; ++i) {
// Open the local database as the input stream.
InputStream is = mContext.getAssets().open("database/" + sFiles[i]);
int length;
while ((length = is.read(buffer)) > 0) {
outputDatabase.write(buffer, 0, length);
}
// Closing stream.
is.close();
}
// Closing the streams.
outputDatabase.flush();
outputDatabase.close();
// Closing database.
close();
}
どこにコピーしましたか?正確なパスをお願いします。 – st0le
はその場所のdata/data/your.package.name/databasesですか? –
はいデータベースのパスはdata/data/package/databasesです。 – Vamshi