2009-07-21 106 views
3

我正在嘗試使用Web服務(我無法控制)在查詢時返回SQLite數據庫。有沒有辦法做到這一點?與來自Android的外部SQLite數據庫進行交互。

+0

Web服務不太可能將整個數據庫作爲文件返回。返回的格式是什麼(SOAP,CSV,JSON,XML等)? – 2009-07-21 09:48:10

+7

相信與否,告訴我我不知道我在說什麼不是很有幫助。我告訴過你在問題中返回了什麼......一個SQLite數據庫文件。 – 2009-07-21 22:44:47

回答

5

我的工作對在做類似的事情的一個項目。我向數據庫請求更新,並根據所需更新的數量,發送一個全新的數據庫或一系列SQL語句。如果數據庫可用,我強烈建議將數據庫保留在SD卡上,尤其是如果您下載的數據庫大小可變並超過幾千字節大小。

我做以下操作來獲取文件(修改味,因爲你可能有XML處理的SOAP響應,也忽略進展東西。)

fileStream = new FileOutputStream(new File(I-build-my-filename-stuff-above-here)); 

/* fileData is a byte[8192] */ 
while((i = httpResponse.read(fileData)) > -1) { 
    fileStream.write(fileData, 0, i); 

    position += i; 

    if (item.getUpdateType() == UpdateItem.FULL_FILE) { 
     progress = position/item.getSize(); 
    } else { 
     progress = position/(item.getSize() * 2); 
    } 

    item.setProgress(progress); 
} // end loop through getting http response stream 

fileStream.close(); 
httpResponse.close(); 

那我下面訪問數據庫。由於這些數據庫也用於iPhone應用程序,因此它們沒有Android特定的表,因此需要使用SQLiteDatabase.NO_LOCALIZED_COLLATORS標誌來訪問數據庫。請注意,我的數據庫類擴展了SQLiteOpenHelper類:

public Database(Context context, String fileName, String title) { 
    super(context, fileName, null, 1); 
    this.context = context; 
    this.title = title; 
    this.fileName = fileName; 

    if (fileName != null && fileName.contains("/sdcard")) { 
     db = SQLiteDatabase.openDatabase(fileName, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);    
    } else { 
     db = getWritableDatabase(); 
    } 

} 
相關問題