2012-07-05 94 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您可以從那裏獲得幾個指針。