下载sqlite数据库时遇到麻烦

时间:2012-07-05 06:11:58

标签: java android sqlite

我的应用程序需要从链接下载数据库,继承我用于下载数据库的代码并将其保存在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();
    }
}

一切似乎都运行良好,但目前我想查询数据库(我正在使用原始查询),会出现一个错误,表示该表不存在。

之后,我尝试调试应用程序,之后我收到错误说数据库已损坏。我认为下载过程正在使数据库损坏。

任何帮助都会被贬低,如果我遗漏了一些代码请分享,请告诉我!

提前致谢!

2 个答案:

答案 0 :(得分:2)

1)您下载的数据库是sqlite数据库吗?

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

这个过程就像你在Sd卡中下载数据库一样,一旦完成就开始将其复制到你的应用程序中,这样它就会成为你的应用程序的一部分,如下所示:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

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

由于

答案 1 :(得分:0)

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

有几个SQLite数据库查看器可用。这篇文章列出了其中几个:What are good open source GUI SQLite database managers?

这篇补充帖子讨论了Android中的现成数据库使用情况:Ship an application with a database你可以从那里得到几个指示。