0

我的应用程序中有一个巨大的数据库(SQLite 引擎),我需要每周运行一次查询并缓存该查询的游标以便以后重新使用它,所以我编写了以下函数来保存我的游标,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;
}
4

1 回答 1

4

我需要每周运行一次查询并缓存该查询的游标以供以后重新使用

每周一次的查询似乎更适合简单地重新运行查询,而不是缓存结果,因为如果在那一周修改数据库,这些结果可能会变得陈旧。

关于如何完成此功能的任何想法?

手动迭代Cursor并将所有行的所有列保存为您选择的文件格式(例如,JSON)。

于 2013-06-05T16:04:13.897 回答