当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法可以智能地在JdbcTemplate上设置fetch大小?

别永年
2023-03-14

理想情况下,如果可以在执行查询之后(但在返回行之前)自动设置,那就太好了。

有没有更好的方法?

我正在使用org。springframework。jdbc。果心支持JDBCDAO支持。SimpleJdbcDaoSupport getJdbcTemplate()。setFetchSize(1000);

共有3个答案

施晗日
2023-03-14

我找到了一个解决方案。我发现获取大小可以在任何时候修改(即使是在检索行的时候)。我的第一个实现将获取大小默认为1。当我看到第二行时,我将其更改为10。当我看到第11行时,我将其更改为100,等等。我使用本地和远程数据库运行了几个性能测试,并登陆以下。(Spring JDBC使用行映射器。这就是我实现org.springframework.jdbc.RowMapper的方式)。

public T mapRow(ResultSet rs, int index) {
    T dto = null;

    if (index == 0) {
        setFetchSize(rs, 50);
    } else if (index == 50) {
        setFetchSize(rs, 500);
    } else if (index == 1000) {
        setFetchSize(rs, 1000);
    }

    try {
        dto = mapRowToDto(rs, index);
    } catch (SQLException e) {
        throw new RuntimeException(e.getMessage(), e);
    }

    return dto;
}
吴星汉
2023-03-14

首先,文档中说,自Spring 3.1以来,SimpleJdbcDaoSupport已被弃用-最好使用JdbcDaoSupport或NamedParameterJdbcDaoSupport

其次,在org.springframework.jdbc.core.support类JdbcDaoSupport中有一个方法:ApplyStatementSetting(语句stmt),您可以使用它来应用语句设置,例如获取大小、最大行和查询超时。

另一种选择是LIMIT查询结果集中返回的行数(在MySQL中使用:LIMIT,对于PL\SQLuse"和rownum

芮瑾瑜
2023-03-14

这是默认的获取大小。显然没有最佳值,因为正如您所描述的,它是使用的内存和数据库往返之间的权衡(默认值100对我来说似乎足够好)。

无论如何,您可以使用ResultSet.setFetchSize()为每个结果集单独设置获取大小。

 类似资料:
  • 我试图让我的UI显示两个按钮,其中一个稍微重叠在另一个,在一个全幅卡的中间。因为堆栈的宽度只能与其未定位的子级相同,所以我添加了一个宽度为double.infinity的SizedBox的未定位子级,以便给我一个画布来放置按钮,但我不知道该放什么作为SizedBox的高度。理想情况下,无论用户是在手机上还是在平板电脑上,我都希望这个小部件能够适当地调整自己的大小,所以我宁愿将SizedBox的高度

  • 问题内容: 嗨,我想使用WMI类来查找应用程序和产品信息。但是问题是我想使用Java或任何脚本语言(如python,javascript或perl)。我听说过JWMI,这可能是一个选择。有人可以帮我吗??? 问题答案: JavaScript和Java不是一回事。 JavaScript Windows脚本宿主(WSH)下提供了JavaScript。有了它,访问WMI相当容易: jWMI(Java)

  • 问题内容: 有没有一种方法可以设置节点js https请求的源端口?我不是在询问目的地,而是在询问来源,即用于发送请求的端口。 上下文是我试图从特定端口而不是随机端口发送https请求,从而允许锁定iptables。节点未以root用户身份运行,因此端口不是443。 更新:看来Node中有一个错误。选项localAddress和localPort至少在TLS套接字中不起作用。 更新:发现与去年类似

  • 你有没有办法把它自动化?还有更多的方法是这样构造的。我在这里什么也不会有。这样做有意义吗,就像我想象的那样?

  • 我正在尝试设置MapMarker对象在地图上两点之间移动的动画。这是设置新位置但没有动画的线条。

  • 作为一个学校项目,我正在开发一个坦克游戏,我正在努力使它尽可能的用户友好(比如可定制的按键绑定、显示设置)。然而,我不希望游戏窗口失去它的比例,所以我想我会在游戏窗口的两侧添加边框,以支持宽屏幕。 我附上了一张图片来说明我在寻找什么: 因此,为了让它工作,我需要一种制作“屏幕层”的方法。基本层是整个屏幕,在屏幕两侧添加了一些图形和显示分数的字体。然后,第二层将呈现在屏幕的中间,这将是游戏窗口,其宽