我的应用程序中有一个庞大的数据库(SQLite Engine),我需要每周运行一次查询并缓存该查询的光标以便以后重新使用它。所以我编写了以下函数来保存我的光标ObjectStream
但我无法通过ObjectInputStream
加载它,因为它不可序列化!!!
有关如何完成此功能的任何想法?
public Cursor getCachedCursor(ReaderState state, String[] allowedColumns
, String sortType, int limit) throws IOException, ClassNotFoundException
{
File cacheFilePath = CacheManager.getCachePath(state.toString() + ".cached");
Cursor mCursor = null;
try
{
if (cacheFilePath == null)
{
FileOutputStream mFileOutputStream = new FileOutputStream(cacheFilePath);
ObjectOutputStream mObjectOutputStream = new ObjectOutputStream(mFileOutputStream);
mObjectOutputStream.writeObject(mDatabase.query(TABLE_NAME, allowedColumns, null, null
, null, null, sortType, String.valueOf(limit)));
mObjectOutputStream.close();
}
}
finally
{
FileInputStream mFileInputStream = new FileInputStream(cacheFilePath);
ObjectInputStream mObjectInputStream = new ObjectInputStream(mFileInputStream);
mCursor = (Cursor) mObjectInputStream.readObject();
mObjectInputStream.close();
}
return mCursor;
}
答案 0 :(得分:4)
我需要每周运行一次查询并缓存该查询的光标以便以后重新使用
每周一次的查询似乎更适合简单地重新运行查询,而不是缓存结果,因为如果在该周期间修改数据库,这些结果可能会变得陈旧。
有关如何完成此功能的任何想法?
手动迭代Cursor
并将所有行的所有列保存为您选择的文件格式(例如,JSON)。