2009-07-21 104 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(); 
    } 

}