1

我的应用程序需要从链接下载数据库,这是我用来下载数据库并将其保存在 sd 卡上的代码:

public void DownloadBD() {
    try {
        URL url = new URL(
                "http://mylink/dbHandler.axd?SqliteDbVersion=0");

        HttpURLConnection urlConnection = (HttpURLConnection) url
                .openConnection();

        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);
        urlConnection.connect();

        File SDCardRoot = Environment.getExternalStorageDirectory();
        File file = new File(SDCardRoot, "DirLaguna.db");

        FileOutputStream fileOutput = new FileOutputStream(file);

        InputStream inputStream = urlConnection.getInputStream();

        int totalSize = urlConnection.getContentLength();
        int downloadedSize = 0;

        byte[] buffer = new byte[1024];
        int bufferLength = 0;
        while ((bufferLength = inputStream.read(buffer)) > 0) {
            fileOutput.write(buffer, 0, bufferLength);
            downloadedSize += bufferLength;
        }
        fileOutput.close();
        location = file.getAbsolutePath();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

一切似乎都工作正常,但目前我想查询数据库(我正在使用原始查询)出现一个错误,指出表不存在。

之后,我尝试调试应用程序,然后我收到错误消息,指出数据库已损坏。我认为下载过程是导致数据库损坏的原因。

任何帮助将不胜感激,如果我缺少一些要分享的代码,请告诉我!

提前致谢!

4

2 回答 2

2

1)你下载的数据库是sqlite数据库?

2)如果是,那么您需要在开始使用之前将其复制到您的应用程序中。

该过程类似于您将数据库下载到 SD 卡中,并在完成后立即开始将其复制到您的应用程序中,使其成为您应用程序的一部分,如下所示:http ://www.reigndesign.com/blog/ using-your-own-sqlite-database-in-android-applications/

通过单独的线程在后台执行此操作,然后您就可以使用它了。如果您遇到任何问题或问题,或者我没有向您提供您的意思的信息,请告诉我。

谢谢

于 2012-07-05T06:51:21.650 回答
0

我建议首先 - 通过将文件移动到本地计算机文件系统并在 SQLite 查看器应用程序中查看它来验证文件是否确实是正确的 SQLite 数据库。

有几个 SQLite 数据库查看器可用。这篇文章列出了其中的几个:什么是好的开源 GUI SQLite 数据库管理器?

这篇附加文章讨论了 Android 中现成数据库的使用:使用数据库发布应用程序您可以从那里获得几个指针。

于 2012-07-05T06:58:05.640 回答