2012-07-05 70 views
1

我的应用程序需要从一个链接下载一个数据库,继承人我用它来下载数据库ADN将其保存在SD卡上的代码:麻烦在下载SQLite数据库

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

1)你下载的数据库是sqlite数据库? 2)如果是,那么你需要在你的应用程序中复制它,然后再开始使用它。

的过程会像你在你的SD卡下载数据库,一旦其完成启动它复制到你的应用程序,因为它成为你的应用程序的一部分,就像这样:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

做到这一点在单独的线程背景,然后你很好去使用它。如果您遇到任何问题或问题,请告知我,或者我没有向您提供您的信息。

感谢

+0

你的教程是好的,问题是你修改表,然后将它添加到应用程序,我需要先添加它,然后修改,我仍然会尝试这种方法,谢谢! – CarlosT

+0

对迟到的歉意抱歉,不,我们不会修改和添加,而只是相反。我们不能直接使用数据库。您将需要在您的apk中以编程方式复制它,因为您不能直接与db文件交互并修改内容。它需要成为应用程序的一部分,以便Android可以为您提供SQLite Apis,以便您可以运行查询。另外,请考虑Romins的第二个链接。它会清除你的疑惑 – iabhi

0

我建议先 - 你验证,如果该文件确实是一个正确的SQLite数据库通过其移动到本地机器上的文件系统,并在SQLite的浏览器应用程序中查看它。

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

这个额外的帖子讨论了Android中的现成数据库使用情况:Ship an application with a database您可以从那里获得几个指针。