我的应用程序需要从链接下载数据库,继承我用于下载数据库的代码并将其保存在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();
}
}
一切似乎都运行良好,但目前我想查询数据库(我正在使用原始查询),会出现一个错误,表示该表不存在。
之后,我尝试调试应用程序,之后我收到错误说数据库已损坏。我认为下载过程正在使数据库损坏。
任何帮助都会被贬低,如果我遗漏了一些代码请分享,请告诉我!
提前致谢!
答案 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你可以从那里得到几个指示。