首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Google中使用CachedRowSet?

如何在Google中使用CachedRowSet?
EN

Stack Overflow用户
提问于 2015-06-09 02:48:09
回答 1查看 196关注 0票数 3

我正在使用(端点)来生成一个简单的API服务。

目前,我正试图使对数据库的查询速度更快、效率更高,因此我决定再次检查调用ResultSet和连接的位置,并关闭它们。

但是,我想使用CachedRowSet,而且考虑到当我试图访问CachedRowSetImpl()时,记录器返回的内容几乎是不可能的:

java.lang.NoClassDefFoundError: com.sun.rowset.CachedRowSetImpl是一个受限类。有关详细信息,请参阅开发人员指南

所以我做了一些调查,的JRE白名单包括:

javax.sql.rowset.CachedRowSet

但不是

com.sun.rowset.CachedRowSetImpl

这说得通吗?否则如何初始化/使用CachedRowSet

我的代码:

代码语言:javascript
复制
public ResultSet getRecordsWhereInt(String table, String where, int condition) throws SQLException {

   c = DatabaseConnect();

   preStatement = c.prepareStatement("SELECT * FROM " + table + " WHERE " + where + " = ?");

   preStatement.setInt(1, condition);

   CachedRowSet rowset = new CachedRowSetImpl();

   rowset.populate(preStatement.executeQuery());

   c.close();

   return rowset;

}

如能提供任何帮助/指导,将不胜感激。

更新1 (09/06/2015):

进一步研究后,我发现您可以使用RowSetProvider.newFactory().createCachedRowSet();实现CachedRowSetImpl的功能

然而,谷歌也限制了RowSetProvider()的使用。

这给我留下了唯一的白名单库RowSetFactory。所以我自己做了,根据RowSetFactory实现了Oracle的实现

代码语言:javascript
复制
public class CachedRowSetFactory implements RowSetFactory {


    public CachedRowSet createCachedRowSet() throws SQLException {
        return new CachedRowSetImpl();
    }

    public FilteredRowSet createFilteredRowSet() throws SQLException {
        return null;
    }

    public JdbcRowSet createJdbcRowSet() throws SQLException {
        return null;
    }

    public JoinRowSet createJoinRowSet() throws SQLException {
        return null;
    }

    public WebRowSet createWebRowSet() throws SQLException {
        return null;
    }
}

然后像这样使用它:

代码语言:javascript
复制
CachedRowSet crs = new CachedRowSetFactory().createCachedRowSet();

然而,即使这样也失败了。当我尝试用工作结果集填充该异常时,上面的示例返回一个空指针异常。我猜工厂的实现不是100%正确的,或者我跳过了一些显而易见的东西。

更新2 (11/06/2015):

我尝试通过手工复制一些库来实现CachedRowSetImpl和RowSetProvider的实现,并消除App白名单中没有涵盖的库。并没有成功。我知道我需要放弃这件事,但我决心让这件事成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-11 22:03:38

CahecRowSet是一个接口,所以很明显,这是白名单。

接口CachedRowSet

我猜你正在连接一个Google CloudSQL实例。

来自javadoc:

CachedRowSet对象是存储在内存中的行的数据行的容器,这样就可以在不总是连接到数据源的情况下操作。

你想做的事毫无意义。AppEngine不会在不同的请求之间保持状态,当然也不会在应用程序自动缩放和新实例出现时保持状态。

为什么不将结果缓存在Memcache中,这将在后续的请求和不同的实例中持续存在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30722221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档