在Android上移动数据库

时间:2011-09-17 10:17:26

标签: java android sqlite

我正在使用SQLite数据库(300 KB)运送我的Android应用程序,在我阅读之后,我需要移动它以便使用它。在iOS中,您将数据库从应用程序移动到文档文件夹,因为您无法写入应用程序,因为它已签名。这也是Android的原因吗?所以回到我的问题。以下代码不能正确复制数据库,它只复制其中的一部分。为什么这样?我在这里做错了吗。

private final static String DB_NAME = "klb.sqlite";
dbPath = "/data/data/" + context.getPackageName() + "/databases/"; // setting this in constructor

(上面的行是私有成员,适用于下面的两个代码示例)

BufferedInputStream bis = new BufferedInputStream(context.getAssets().open(DB_NAME));
FileOutputStream fos = new FileOutputStream(dbPath + DB_NAME);

while (bis.read() != -1) {
    fos.write(bis.read());
}

bis.close();
fos.flush();
fos.close();

然而,这有效:(对不起因为重新缩进而懒惰)

        InputStream inputStream = context.getAssets().open("klb.sqlite");
        OutputStream outputStream = new FileOutputStream(file);

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

        inputStream.close();
        outputStream.close();

1 个答案:

答案 0 :(得分:5)

while (bis.read() != -1) {
    fos.write(bis.read());
}

仔细看看。您拨打read两次,但write一次。你实际上正在跳过所有其他字节。